2013-05-31 21 views
6

Zostałem poproszony o dodanie GCS do strony internetowej. Po wykonaniu instrukcji tworzenia bezpłatnego GCS (http://www.google.com/cse/sitesearch/create) i wklejeniu dostarczonego fragmentu w odpowiednie miejsce, elementy przycisku wyszukiwania & renderują OK, a użytkownik może wprowadzić ciąg wyszukiwania, uruchomić wyszukiwanie i zobaczyć wyniki . Jak na razie dobrze.Jak od razu uruchomić Google Custom Search (V2) za pomocą wcześniej załadowanego ciągu wyszukiwania?

Jednak gdy składniki czynią po raz pierwszy chcę być w stanie przejść wcześniej wpisany ciąg znaków w polu i programowo mają przeszukiwanie wykonywane natychmiast. Ten bit nie działa.

Kod, który obecnie mam na miejscu, jest następujący, składający się z dostarczonego fragmentu plus dodatkowy kod wywodzący się z mojego odczytu Doc dokumentu API kontroli wyszukiwania niestandardowego (https://developers.google.com/custom-search/docs/element) i przeznaczony do wdrożenia "wykonania natychmiastowego":

<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 to ciąg, który chcę automatycznie wyszukać. Po wyrenderowaniu składników krótko pojawia się ciąg "gname =" 2DSearch "", a następnie znika ponownie tuż przed pojawieniem się składników wyszukiwania, a następnie nic się nie dzieje.

Pojawiają się tu pewne podobieństwa z tym pytaniem (bez odpowiedzi): https://stackoverflow.com/questions/15871911/passing-optional-search-parameters-into-google-custom-search-query

Szukałem w internecie na próżno na kilka godzin do niczego innego właściwego.

Czy ktoś może mi powiedzieć, dlaczego to nie działa i/lub co muszę zrobić?

Moje przeprosiny, zrobiłem dużo programowania, ale jestem praktycznie analfabetą jeśli chodzi o HTML & javascript. Dzięki Jim

odkryłem, że konsola Chrome pokazuje następujący błąd: Uncaught ReferenceError: Google nie jest zdefiniowana

Mój kod wygląda teraz tak:

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

W konsoli ponownie jestem teraz też widząc, co następuje:

XMLHttpRequest nie może załadować (tu wstawić odnośnik JSAPI powyżej, że nie wolno mi odpowiedzieć). Pochodzenie (wstaw tutaj adres URL mojego hosta lokalnego) jest niedozwolone w programie Access-Control-Allow-Origin.

Istnieje wiele odniesień do podobnych błędów w całej sieci, każda nieco inna, z proponowanymi rozwiązaniami odnoszącymi się do JSON, JQUERY, AJAX etc.etc., Ale nic, co znalazłem wydaje się być bezpośrednio związane z tym, co ja próbuję zrobić (tj. udostępnić mojemu kodowi plik lub bibliotekę, w której zdefiniowano "google"), a nic, co próbowałem, nie zadziałało.

Dyskusja o próbując znaleźć drogę poprzez kopalni ze świecą ... :) Cheers

Odpowiedz

12

Mam to działa z opcją GCSE zwrotnego (ja też zmieniłem układ w CSE Panelu sterowania aby zapobiec domyślnej nakładce).

<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

Skopiowałem to, które działa, ale nie wyświetla pola wyszukiwania? wyświetlane są tylko wyniki wyszukiwania. – shorif2000

+0

spróbuj zmienić "tylko wyniki wyszukiwania" na "szukaj" –

1

Czy możesz podać wyszukiwane hasło przez 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> 

Jeśli zadzwonisz swoją stronę „szukaj” poprzez yourdomain.com/search?term=searchword wyniki wyszukiwania pojawiają się natychmiast.

Powiązane problemy