Rufen Sie die Funktion auf, nachdem Sie die benutzerdefinierten Suchergebnisse von Google geladen haben.

Ich muss grundsätzlich etwas jQuery-Code ausführen, nachdem die Suchergebnisse auf meiner Seite gerendert wurden. Ich kann entweder den v1-Code verwenden:

<div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript"> 
 google.load('search', '1', {language : 'en', style : google.loader.themes.V2_DEFAULT});
 google.setOnLoadCallback(function() {
var customSearchOptions = {};
var orderByOptions = {};
orderByOptions['keys'] = [{label: 'Relevance', key: ''},{label: 'Date', key: 'date'}];
customSearchOptions['enableOrderBy'] = true;
customSearchOptions['orderByOptions'] = orderByOptions;  var customSearchControl = new google.search.CustomSearchControl(
  'zzzzzzzzzzzz', customSearchOptions);
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
var options = new google.search.DrawOptions();
options.setAutoComplete(true);
customSearchControl.setAutoCompletionId('zzzzzz:zzzzzzz+qptype:3');
options.enableSearchResultsOnly(); 
customSearchControl.draw('cse', options);
function parseParamsFromUrl() {
  var params = {};
  var parts = window.location.search.substr(1).split('\x26');
  for (var i = 0; i < parts.length; i++) {
    var keyValuePair = parts[i].split('=');
    var key = decodeURIComponent(keyValuePair[0]);
    params[key] = keyValuePair[1] ?
        decodeURIComponent(keyValuePair[1].replace(/\+/g, ' ')) :
        keyValuePair[1];
  }
  return params;
}

var urlParams = parseParamsFromUrl();
var queryParamName = "q";
if (urlParams[queryParamName]) {
  customSearchControl.execute(urlParams[queryParamName]);
}
  }, true);
</script>

Oder der v2 Code:

<!-- Put the following javascript before the closing </head> tag. -->

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

Ich habe versucht, meinen Funktionsaufruf an verschiedenen Stellen im Code zu platzieren, aber ohne Erfolg.

Ich habe eine Funktion, die die Höhe des Containers dynamisch festlegen muss, in dem die Suchergebnisse angezeigt werden. Sobald die Ergebnisse geladen sind, muss ich sie aufrufen, da meine Seite sonst falsch angezeigt wird.

Hier ist ein Link zu ihrer v2 API-Dokumentation:https://developers.google.com/custom-search/docs/element#cse-element und v1:https://developers.google.com/custom-search/docs/js/cselement-reference . Ich kann nichts sehen, bei dem beim Rendern der Suchergebnisse ein Rückruf erfolgt, nur bei der Initialisierung. Scheint verrückt, obwohl es für so etwas keine Unterstützung gibt.

Folgendes habe ich mit v2 versucht:

(function () {
        var cx = 'xxxxxxxxx';
        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;
        gcse.onreadystatechange = gcse.onload = function () {
            console.log("executed");
            SetMainHeight(20);
        };
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);

    })();

Die Konsole gibt niemals "ausgeführt" aus. Außerdem stelle ich in meiner Konsole fest, dass ich den folgenden Fehler habe:

Unsicherer JavaScript-Versuch, auf Frame mit URL zuzugreifen zu: Leerzeichen aus Frame mit URLhttp://www.google.com/cse?q=test&client=google-coop&hl=de&r=s&cx=xxxxx… S1% 2Csr1 & rurl = http% 3A% 2F% 2Flocalhost% 3A58257% 2FSearch% 3Fq% 3Dtest # slave-1-1. Domänen, Protokolle und Ports müssen übereinstimmen.

Ich bin mir nicht sicher, ob das wichtig ist, da die Suchfunktion immer noch funktioniert. Ich teste dies auf localhost über http.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage