【问题标题】:google custom search determine when script is loaded谷歌自定义搜索确定何时加载脚本
【发布时间】:2012-11-02 10:12:18
【问题描述】:

我正在以最简单的形式使用谷歌自定义搜索。我刚刚在视图中添加了生成的脚本和标签<gcse:search></gcse:search>。一切都按预期工作,但是我希望能够自己在文本框中设置搜索词,然后触发提交。我不知道如何确定何时加载下面的脚本。有没有办法修改脚本以便我可以使用 jQuery then() 函数?

(function () {
        var cx = 'xxxxxxxxxxxxxxxxxx:xxxxxxxx';
        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 type="text/javascript" src="https://www.google.se/jsapi"></script>

<script type="text/javascript">
    google.load("search", "1", { language: 'sv', style: google.loader.themes.MINIMALIST });
    google.setOnLoadCallback(function () {
        var ctrl = new google.search.CustomSearchControl('xxxxxxxxxxxxxxxxxx:xxxxxxxx');
        ctrl.draw('cse');

        // you can do stuff here, like trigger a search as shown  below !!        

        ctrl.execute('<%=Request.QueryString["text"] %>');
    }, true);
</script>

【问题讨论】:

  • @Palle 我正在尝试做同样的事情。你能解释一下你是怎么做到的吗?在你的 ctrl.draw('cse') 之后,你在哪里传递搜索结果,以便谷歌知道要搜索什么?
  • ctrl.execute() 将触发搜索。在此示例中,查询字符串中的值包含搜索词,但您可以执行 ctrl.execute('some term');

标签: javascript jquery google-custom-search


【解决方案1】:

我为此使用了一种解决方法。来自 google 的脚本正在创建一个带有 src 属性的 iframe,其中包含 &cx= 代码和要搜索的字词 (&q=):

http://www.google.com/cse?cx=xxxxxxxxxxxxx%3Ac8u_ywvcjnw&ie=UTF-8&q=term+to+search&sa=Search&....

使用 jquery,您可以创建一个 iframe,并将 src 属性设置为上述链接。

【讨论】:

  • @Silvanu 我正在尝试做与您能够做的相同的事情:我想在我的其他事件之一完成后触发搜索。如何使用 JQuery 创建 iframe?
【解决方案2】:

如果其他人想以更简单的方式执行此操作 - 我只是使用 setInterval 来轮询它何时加载。搜索栏:

 <gcse:searchresults-only gname='ap_search'></gcse:searchresults-only> 

然后在它下面添加一个脚本标签:

javascript:
  var int=setInterval(function() {
    if (typeof google != 'undefined' && google.search.cse) {
      google.search.cse.element.getElement('ap_search').execute("#{@term}")  
      clearInterval(int)
    }
  }, 200)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2013-01-21
    相关资源
    最近更新 更多