5

wir eine eigene searchbar auf unserer Website haben, und ich bemerkte, dass manchmal (9/10 mal) die JS diesen Fehler werfen, die den Inhalt zwingt, die Sie gesucht haben, um nicht zu machenGoogle WebSearch API benutzerdefinierte Suche wirft 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

Suchseite, wenn Fehler ausgelöst: Search page when error is thrown

Suchseite mit Fehlern verkürzte/aufgelöst Search page when error is truncated or resolved

Aber wenn ich aktualisieren oder forschen sollte, ist dieser Fehler übertrumpft und wird alle meine Suchen rendern. Nach dem Durchsehen der Datei fand ich heraus, dass die google.search.Search.apiary####, auf die sie sich beziehen, nur einmal erwähnt wird. Also ich glaube, dass dieser Fehler die gesamte Datei abschneidet, wenn es angezeigt wird. Was könnte das verursachen, was wären einige Möglichkeiten, es zu beheben?

+0

Vielen Dank für die vorgeschlagene Lösung.Tatsächlich verwenden wir auf allen unseren Seiten eine einfache HTML-Textbox und leiten die Suchanfrage dann auf eine bestimmte Nur-Suche-Seite um. Auf dieser Suchseite haben wir das Google-Suchfeld (generiert vom Skript) und die Suchergebnisse. Ich glaube, das Skript, das zweimal ausgeführt wurde, verursachte das Problem auch für uns. Ich habe einen von ihnen entfernt und es scheint zu dieser Zeit zu funktionieren. Vielen Dank für die Dokumentation. –

Antwort

10

Okay, stieß ich auf eine Antwort: -

Nach etwas mehr Forschung zu tun, fand ich, dass this user on Google Forums auch das gleiche Problem hat.

Um es einfach auszudrücken, verwenden Sie eine <script>, um Ihre Suchleiste zu generieren.

Sie haben diese Funktion + html-Element für Ihre Suchleiste

<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> 

So wir die Messlatte in unserem <div class="header"> erzeugt, das ein HAML Element als Teil einer Vorlage. So wurde es immer in jedem Header geladen. Da wir 10 Seiten haben, wurde das gleiche Skript 1 mal pro Seite generiert.

Unser Google CSE wird gesucht und dann zur URL /search-results weitergeleitet, wo es die Ergebnisse generiert.

Um die Ergebnisse zu erzeugen, benötigt man diese Funktion und 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> 

die die gleiche wie derjenige in unserer Rubrik geladen ist. Mit dieser Konfiguration würde die Ergebnisseite das <script> beim Laden zweimal aufrufen und dazu führen, dass JS bricht. Nach dem Entfernen der <script> Laden der Ergebnisse, hörte es auf, den Fehler zu werfen.

Um es kurz zu machen, stellen Sie sicher, dass Sie nicht gleich function zweimal auf Ihrer Ergebnisseite anrufen, und es sollte die Uncaught TypeError aufräumen.

Nicht. Wiederholen. Yourself

--ether

1

In meinem Fall hatte ich versehentlich the form and script für die Google Custom Search auf der gleichen Seite zweimal wiederholt. Sobald das zweite Los entfernt wurde, hörte es auf, den Fehler zu geben.

Verwandte Themen