5

我們對我們的網站自定義搜索欄,我注意到,有時(9/10倍)JS將拋出這個錯誤,這迫使你搜索到沒有呈現內容谷歌網絡搜索API定製搜索拋出TypeErrors

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

Uncaught TypeError: google.search.Search.apiary#### is not a function

搜索頁面時引發錯誤: Search page when error is thrown

搜尋有錯誤截斷頁/解決 Search page when error is truncated or resolved

但是,如果我要刷新或研究,這個錯誤是錯誤的,並將呈現我所有的搜索。在查看文件後,我發現他們提到的google.search.Search.apiary####只提到過一次。所以我相信這個錯誤會在它顯示時截斷整個文件。有什麼可能導致這種情況,有什麼修復它的選項?

+0

非常感謝您提供的解決方案。事實上,我們在所有頁面上都使用簡單的HTML TEXT框,然後將搜索查詢重定向到特定的僅搜索頁面。 在此搜索頁面上,我們確實有Google的搜索框(由腳本生成)和搜索結果。我相信,兩次運行的腳本也給我們造成了這個問題。我已經刪除了其中的一個,現在似乎可以工作。 非常感謝您的記錄。 –

回答

10

好吧,我偶然發現了一個答案: -

做一些更多的研究後,我發現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> 

所以我們產生了我們<div class="header">酒吧是一個HAML元素,作爲模板的一部分。所以它總是在每個頭文件中加載。由於我們有10個頁面,每個頁面都會生成一次相同的腳本。

我們的Google CSE搜索並重定向到其產生結果的網址/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> 

哪一樣我們的頭一個被加載。 通過此設置,結果頁面在裝入時會調用<script>兩次,並導致JS中斷。所以刪除<script>加載結果後,它停止拋出錯誤。

簡而言之,只要確保在結果頁面上不會調用相同的function兩次,並且它應該清除Uncaught TypeError

不要。重複。自己

--ether

1

在我來說,我不小心有the form and script爲谷歌自定義搜索在同一頁面上重複兩次。一旦第二批被刪除,它停止提供錯誤。