5

Abbiamo una barra di ricerca personalizzato sul nostro sito e ho notato che a volte (9/10 volte) il JS getterà questo errore, che costringe il contenuto che hai cercato di non rendereGoogle WebSearch API di ricerca personalizzata getta 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

pagina di ricerca quando viene generata l'errore: Search page when error is thrown

pagina di ricerca con l'errore troncato/risolto Search page when error is truncated or resolved

Ma se dovessi aggiornare o ricercare, questo errore viene troncato e renderà tutte le mie ricerche. Dopo aver esaminato il file, ho scoperto che lo google.search.Search.apiary#### a cui si riferiscono viene menzionato solo una volta. Quindi ritengo che questo errore stia troncando l'intero file quando viene visualizzato. Cosa potrebbe causare questo, quali sarebbero alcune opzioni per risolverlo?

+0

Grazie mille per la soluzione suggerita.In effetti, stiamo utilizzando una semplice casella HTML TEXT su tutte le nostre pagine e quindi reindirizzare la query di ricerca a una specifica pagina di ricerca. In questa pagina di ricerca, abbiamo la casella di ricerca di Google (generata dallo script) e i risultati della ricerca. Credo che la sceneggiatura che è stata eseguita due volte abbia causato il problema anche a noi. Ho rimosso uno di loro e sembra funzionare in questo momento. Grazie mille per averlo documentato. –

risposta

10

Va bene, sono incappato in una risposta: -

Dopo aver fatto un po 'di ricerca, ho scoperto che this user on Google Forums ha anche lo stesso problema.

Per dirla semplicemente, il modo in cui funziona è utilizzare uno <script> per generare la barra di ricerca.

si ha questa funzione + elemento HTML per la vostra barra di ricerca

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

Così abbiamo generato il bar nel nostro <div class="header"> che è un elemento HAML, come parte di un modello. Quindi è stato sempre caricato all'interno di ogni intestazione. Dato che abbiamo 10 pagine, questo stesso script è stato generato 1 volta per pagina.

Il nostro Google CSE è fatto per cercare e quindi reindirizzare all'url /search-results dove genera i risultati.

per generare i risultati, è necessaria questa funzione e 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> 

Quale è lo stesso di quello che viene caricato nel nostro intestazione. Con questa configurazione, la pagina dei risultati chiama lo <script> due volte durante il caricamento e causa l'interruzione dello JS. Quindi, dopo aver rimosso il <script> caricando i risultati, ha smesso di lanciare l'errore.

Per dirla in breve, assicurati di non chiamare lo stesso function due volte nella pagina dei risultati, e dovrebbe deselezionare lo Uncaught TypeError.

No. Ripetere. Yourself

--ether

1

Nel mio caso ho avuto accidentalmente the form and script per il Google Custom Search ripetuto due volte sulla stessa pagina. Una volta rimosso il secondo lotto, ha smesso di dare l'errore.