2013-05-31 17 views
6

Sono stato incaricato di aggiungere GCS a un sito Web. Dopo aver seguito le istruzioni per creare il mio GCS gratuito (http://www.google.com/cse/sitesearch/create) e incollato lo snippet fornito nella posizione appropriata, i componenti del pulsante di ricerca & rendono OK e l'utente è in grado di inserire una stringa di ricerca, eseguire la ricerca e vedere i risultati . Fin qui tutto bene.Come ottenere la Ricerca personalizzata Google (V2) da eseguire immediatamente con una stringa di ricerca precaricata?

Tuttavia, quando i componenti eseguono il rendering per la prima volta, desidero essere in grado di passare una stringa pre-inserita nella casella e programmare la ricerca immediatamente eseguita. Questo bit non funziona.

Il codice ho attualmente in essere è la seguente, costituito dal frammento di dotazione più alcuni codice aggiuntivo derivato dalla mia lettura del Custom Search Element controllo API doc (https://developers.google.com/custom-search/docs/element) e destinato ad attuare il 'eseguire immediato':

<div class="content-container"> 
    <script type="text/javascript"> 
     (function() { 
      var cx = '(my search id)'; 
      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> 
    <gcse:search> gname="2DSearch"</gcse:search> 
    <script type="text/javascript"> 
     var element = google.search.cse.element.getElement("2DSearch"); 
     element.prefillQuery(primarySearch); 
     element.execute(primarySearch); 
    </script> 
</div> 

primarySearch è la stringa su cui si desidera eseguire automaticamente la ricerca. Quando i componenti vengono visualizzati, la stringa 'gname = "2DSearch"' appare brevemente e poi scompare di nuovo poco prima che compaiano i componenti di ricerca, quindi non accade nient'altro.

Sembra che ci siano alcune somiglianze qui con questa domanda (senza risposta): https://stackoverflow.com/questions/15871911/passing-optional-search-parameters-into-google-custom-search-query

Ho cercato sul web invano un numero di ore per qualsiasi altra cosa rilevante.

Qualcuno può dirmi perché non funziona e/o cosa devo fare?

Le mie scuse, ho fatto un sacco di programmazioni ma sono praticamente analfabeta quando si tratta di HTML & javascript. Grazie Jim

ho scoperto che la console Chrome sta mostrando il seguente errore: Uncaught ReferenceError: Google non è definito

Il mio codice ora assomiglia a questo:

<div class="content-container"> 
    <script type="text/javascript"> 
     (function() { 
      var cx = '013736134253840884188:fxsx6zqql_y'; 
      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> 
</div> 

<div class="gcse-search" data-gname="2DSearch"></div> 

<div class="content-container"> 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 
     var element = google.search.cse.element.getElement("2DSearch"); 
     element.prefillQuery(primarySearch); 
     element.execute(primarySearch); 
    </script> 
</div> 

Nella console di nuovo Ora vedo anche quanto segue:

XMLHttpRequest non può caricare (inserire qui il link jsapi sopra che non sono autorizzato a postare). Origin (inserire qui l'URL per il mio localhost) non è consentito da Access-Control-Allow-Origin.

Ci sono numerosi riferimenti a errori simili a questo in tutta la rete, ognuno leggermente diverso, con soluzioni proposte che fanno riferimento a JSON, JQUERY, AJAX ecc., Ma nulla di quello che ho trovato sembra direttamente rilevante per quello che ho sto cercando di fare (cioè rendere disponibile al mio codice il file o la libreria in cui è definito 'google'), e nulla di ciò che ho provato ha funzionato.

Parlare cercando di trovare la strada attraverso una miniera di carbone con una candela ... :) Acclamazioni

risposta

12

ho ottenuto che funziona con l'opzione di callback GCSE (ho anche cambiato il mio layout nel Pannello di Controllo CSE per prevenire la sovrapposizione predefinita).

<script> 
function gcseCallback() { 
    if (document.readyState != 'complete') 
    return google.setOnLoadCallback(gcseCallback, true); 
    google.search.cse.element.render({gname:'gsearch', div:'results', tag:'searchresults-only', attributes:{linkTarget:''}}); 
    var element = google.search.cse.element.getElement('gsearch'); 
    element.execute('this is my query'); 
}; 
window.__gcse = { 
    parsetags: 'explicit', 
    callback: gcseCallback 
}; 
(function() { 
    var cx = 'YOUR_ENGINE_ID'; 
    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> 

<div id="results"></div> 
+0

ho copiato questo che funziona ma non visualizza la casella di ricerca? più semplicemente vengono visualizzati solo i risultati della ricerca. – shorif2000

+0

prova a cambiare "searchresults-only" in "search" –

1

Puoi passare il termine di ricerca tramite l'URL?

<script> 
    (function() { 
    var cx = 'YOURID'; 
    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> 

<gcse:searchbox queryParameterName="term"></gcse:searchbox> 
<gcse:searchresults></gcse:searchresults> 

Se si chiama la pagina "ricerca" tramite yourdomain.com/search?term=searchword i risultati della ricerca vengono visualizzati immediatamente.

Problemi correlati