6

我的任务是将 GCS 添加到网站。在我按照说明创建我的免费 G​​CS ( http://www.google.com/cse/sitesearch/create ) 并将提供的代码段粘贴到适当的位置后,搜索框和按钮组件呈现正常,用户是能够输入搜索字符串,运行搜索并查看结果。到目前为止,一切都很好。

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

我目前拥有的代码如下,包括提供的代码段以及从我阅读自定义搜索元素控制 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 方面几乎是文盲。谢谢吉姆

我发现 Chrome 控制台显示以下错误: Uncaught ReferenceError: google is not defined

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

<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(在此处插入我的 localhost 的 URL)。

网上有很多类似错误的引用,每一个都略有不同,提出的解决方案涉及 JSON、JQUERY、AJAX 等,但我发现的任何内容似乎都与我正在尝试做的事情没有直接关系(即让我的代码可以使用定义了“google”的文件或库),而我尝试过的任何方法都没有奏效。

谈论尝试用蜡烛在煤矿中寻找出路... :) 干杯

4

3 回答 3

15

我已经使用 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>
于 2013-11-22T10:13:03.390 回答
2
<gcse:search gname='abcd'></gcse:search>

当页面加载时:

google.search.cse.element.getElement('abcd').execute(query);
于 2018-08-23T04:32:33.060 回答
2

您可以通过 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,搜索结果会立即出现。

于 2016-05-08T13:23:25.697 回答