Google Custom getElement at null - 无法访问 <gcse:..>元素

Google custom getElement at null - can't access to <gcse:...> element

本文关键字:gcse 元素 访问 getElement Custom at null Google      更新时间:2023-09-26

首先,我真的很抱歉我的英语(真的很糟糕......我的工作有很大的问题。我想在加载页面(prestashop网站)时执行谷歌自定义搜索查询。我尝试了所有方法(使用谷歌 API 或 1000 个不同的论坛/网站),但我无法让它工作!

这是我的代码:

<div id="div_google_search" class="div_google_search">
            <script>
                var InitCSE = function() {
                    //google.search.cse.element.render();
                        var str="";
                        str= "{$search_query}";
                        var componentConfig = {
                            div: 'google_search',
                            tag: 'search',
                            gname: 'google_search',
                            attributes: {
                                    queryParameterName: 'query',
                                    enableHistory: true,
                                    enableAutoComplete: true
                                }
                          };
                        google.search.cse.element.render( componentConfig );
                        var gsearch = google.search.cse.element.getElement('google_search');
                        //console.log(gsearch);
                        gsearch.execute(str);
                };
                window.__gcse = {
                  parsetags: 'explicit',
                  callback: function()
                   {
                       if( document.readyState == 'complete' )
                       {
                           InitCSE();
                       }
                       else
                       {
                           google.setOnLoadCallback( function () { InitCSE(); }, true );
                       }
                   }
                };
                var loadElements = function(){
                    var cx = '123:456';
                      var gcse = document.createElement('script'); 
                      gcse.type = 'text/javascript';
                      gcse.async = true;
                      gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
                      //console.log(gcse);
                      var s = document.getElementsByTagName('script')[0]; 
                      s.parentNode.insertBefore(gcse, s);
                };
              (function() {
                loadElements();

              })();
            </script>
            <gcse:search gname="google_search"></gcse:search>
        </div>

和错误:

未捕获的类型错误:无法读取 null 的属性"执行"

我知道变量gsearch由于某种原因无法获取元素"google_search"。我想知道为什么..

非常感谢您的帮助!

我已经解决了问题!

我忘记了在 var 组件配置中指定的div :

var componentConfig = {

div: 'google_search',

                        tag: 'search',
                        gname: 'google_search',
                        attributes: {
                                queryParameterName: 'query',
                                enableHistory: true,
                                enableAutoComplete: true
                            }
                      };

结果:

<div id="div_gsearch" class="div_gsearch">
    <div id="google_search"></div>
        <script>
            var InitCSE = function() {
                //google.search.cse.element.render();
                    var str="";
                    str= "{$search_query}";
                    var componentConfig = {
                        div: 'google_search',
                        tag: 'search',
                        gname: 'google_search',
                        attributes: {
                                queryParameterName: 'query',
                                enableHistory: true,
                                enableAutoComplete: true
                            }
                      };
                    google.search.cse.element.render( componentConfig );
                    var gsearch = google.search.cse.element.getElement('google_search');
                    //console.log(gsearch);
                    gsearch.execute(str);
            };
            window.__gcse = {
              parsetags: 'explicit',
              callback: function()
               {
                   if( document.readyState == 'complete' )
                   {
                       InitCSE();
                   }
                   else
                   {
                       google.setOnLoadCallback( function () { InitCSE(); }, true );
                   }
               }
            };
            var loadElements = function(){
                var cx = '123:456';
                  var gcse = document.createElement('script'); 
                  gcse.type = 'text/javascript';
                  gcse.async = true;
                  gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
                  //console.log(gcse);
                  var s = document.getElementsByTagName('script')[0]; 
                  s.parentNode.insertBefore(gcse, s);
            };
          (function() {
            loadElements();

          })();
        </script>
        <gcse:search gname="google_search"></gcse:search>
    </div>