【问题标题】:Google WebSearch API custom search throws TypeErrorsGoogle Web Search API 自定义搜索引发 TypeError
【发布时间】:2015-10-28 17:37:10
【问题描述】:

我们的网站上有一个自定义搜索栏,我注意到有时(9/10 次)JS 会抛出此错误,这会强制您搜索的内容不呈现

www.googleapis.com/customsearch/v1element?key=AIzaSyCVAXiUzRYsML1Pv6RwSG1gu…oogle.com&callback=google.search.Search.apiary####&nocache=1446053383742:2

未捕获的类型错误:google.search.Search.apiary#### 不是函数

发生错误时的搜索页面:

错误被截断/解决的搜索页面

但如果我要刷新或研究,这个错误会被排除在外,并且会呈现我的所有搜索。翻阅文件后,我发现他们所指的google.search.Search.apiary#### 只提到过一次。所以我相信这个错误会在它出现时截断整个文件。可能是什么原因造成的,有哪些解决方法?

【问题讨论】:

  • 非常感谢您提出的解决方案。事实上,我们在所有页面上都使用了一个简单的 HTML TEXT 框,然后将搜索查询重定向到特定的仅搜索页面。在这个搜索页面上,我们确实有 Google 的搜索框(由脚本生成)和搜索结果。我相信,运行两次的脚本也给我们带来了问题。我已经删除了其中一个,目前它似乎可以工作。非常感谢您记录它。

标签: javascript google-search google-custom-search google-search-api


【解决方案1】:

好吧,我偶然发现了一个答案:-

经过一番研究,我发现this user on Google Forums也有同样的问题。

简单地说,它的工作方式是使用<script> 来生成搜索栏。

你的搜索栏有这个函数 + html 元素

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

<gcse:searchbox-only resultsUrl="/search-results"></gcse:searchbox-only>

所以我们在&lt;div class="header"&gt; 中生成了条形图,它是一个HAML 元素,作为模板的一部分。所以它总是在每个标题中加载。由于我们有 10 页,因此每页生成 1 次相同的脚本。

我们的 Google CSE 进行搜索,然后重定向到生成结果的 URL /search-results

要生成结果,您需要此函数和 HTML

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

这与我们的 Header 中加载的相同。 使用此设置,结果页面将在加载时调用 &lt;script&gt; 两次,并导致 JS 中断。因此,在删除 &lt;script&gt; 加载结果后,它停止抛出错误。

简而言之,只要确保您没有在结果页面上两次调用相同的function,它就会清除Uncaught TypeError

不要。重复。自己

--以太

【讨论】:

    【解决方案2】:

    就我而言,我不小心在同一页面上重复了两次用于 Google 自定义搜索的 the form and script。一旦第二批被删除,它就停止给出错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多