如何使用预先加载的搜索字符串立即执行谷歌自定义搜索(V2)

How to get the Google Custom Search (V2) to execute immediately with a pre-loaded search string?

本文关键字:搜索 谷歌 执行 自定义 V2 字符串 何使用 加载      更新时间:2023-09-26

我的任务是将GCS添加到网站中。在我按照说明创建我的免费GCS之后(http://www.google.com/cse/sitesearch/create),并将提供的片段粘贴到适当的位置,即搜索框&按钮组件显示为OK,用户可以输入搜索字符串,运行搜索并查看结果。到目前为止还不错。

但是,当组件第一次呈现时,我希望能够将预先输入的字符串传递到框中,并以编程方式立即执行搜索。这个位不起作用。

我目前拥有的代码如下所示,包括提供的代码片段和从我阅读自定义搜索元素控件API文档中获得的一些额外代码(https://developers.google.com/custom-search/docs/element)并旨在实现"立即执行":

<div class="content-container">  
    <script type="text/javascript"> 
        (function() { 
            var cx = '(my search id)'; 
            var gcse = document.createElement('script'); 
            gcse.type = 'text/javascript'; 
            gcse.async = true; 
            gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
                '//www.google.com/cse/cse.js?cx=' + cx; 
            var s = document.getElementsByTagName('script')[0]; 
            s.parentNode.insertBefore(gcse, s); 
        })(); 
    </script> 
    <gcse:search> gname="2DSearch"</gcse:search> 
    <script type="text/javascript"> 
        var element = google.search.cse.element.getElement("2DSearch"); 
        element.prefillQuery(primarySearch); 
        element.execute(primarySearch); 
    </script> 
</div> 

primarySearch是我想要自动搜索的字符串。当组件呈现时,字符串"gname="2DSearch"会短暂出现,然后在搜索组件出现之前再次消失,然后什么都不会发生。

这里似乎与这个问题有一些相似之处(未回答(:https://stackoverflow.com/questions/15871911/passing-optional-search-parameters-into-google-custom-search-query

我在网上徒劳地搜索了好几个小时,寻找其他相关的东西。

有人能告诉我为什么它不起作用和/或我需要做什么吗?

很抱歉,我已经做了很多编程,但当涉及到HTML&javascript。谢谢Jim

我发现Chrome控制台显示以下错误:未捕获引用错误:谷歌未定义

我的代码现在看起来是这样的:

<div class="content-container">
    <script type="text/javascript">
        (function() {
            var cx = '013736134253840884188:fxsx6zqql_y';
            var gcse = document.createElement('script');
            gcse.type = 'text/javascript';
            gcse.async = true;
            gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
                '//www.google.com/cse/cse.js?cx=' + cx;
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(gcse, s);
        })();
    </script>
</div>
<div class="gcse-search" data-gname="2DSearch"></div>
<div class="content-container">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        var element = google.search.cse.element.getElement("2DSearch");
        element.prefillQuery(primarySearch);
        element.execute(primarySearch);
    </script>
</div>

再次在控制台中,我现在也看到了以下内容:

XMLHttpRequest无法加载(在此处插入上面不允许发布的jsapi链接(。Access Control Allow Origin不允许使用Origin(在此处插入我的本地主机的URL(。

网络上有很多类似错误的引用,每一个都略有不同,提出的解决方案都引用了JSON、JQUERY、AJAX等,但我发现的似乎都与我试图做的事情没有直接关系(即,让我的代码可以使用定义了"谷歌"的文件或库(,我尝试过的都没有奏效。

谈论试图用蜡烛穿过煤矿…:(干杯

我已经使用了gcse回调选项(我还更改了CSE控制面板中的布局,以防止默认覆盖(。

<script>
function gcseCallback() {
  if (document.readyState != 'complete')
    return google.setOnLoadCallback(gcseCallback, true);
  google.search.cse.element.render({gname:'gsearch', div:'results', tag:'searchresults-only', attributes:{linkTarget:''}});
  var element = google.search.cse.element.getElement('gsearch');
  element.execute('this is my query');
};
window.__gcse = {
  parsetags: 'explicit',
  callback: gcseCallback
};
(function() {
  var cx = 'YOUR_ENGINE_ID';
  var gcse = document.createElement('script');
  gcse.type = 'text/javascript';
  gcse.async = true;
  gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
    '//www.google.com/cse/cse.js?cx=' + cx;
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(gcse, s);
})();
</script>
<div id="results"></div>

你能通过URL传递搜索词吗?

<script>
  (function() {
    var cx = 'YOURID';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//www.google.com/cse/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>
<gcse:searchbox queryParameterName="term"></gcse:searchbox>
<gcse:searchresults></gcse:searchresults>

如果您通过yourdomain.com/search?term=searchword调用"搜索"页面,搜索结果会立即显示。

<gcse:search gname='abcd'></gcse:search>

当页面加载时:

google.search.cse.element.getElement('abcd').execute(query);