Chamar a função depois de carregar os resultados de pesquisa personalizados do Google?
Eu basicamente preciso executar algum código jQuery depois que os resultados da pesquisa são processados na minha página. Eu posso usar o código v1:
<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>
Ou o código v2:
<!-- 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>
Eu tentei colocar minha chamada de função em vários lugares no código, mas não adiantou.
Eu tenho uma função que precisa definir dinamicamente a altura do contêiner em que os resultados da pesquisa aparecem, portanto, assim que os resultados forem carregados, preciso chamá-los, caso contrário, minha página será exibida incorretamente.
Aqui está um link para a documentação da API v2:https://developers.google.com/custom-search/docs/element#cse-element e v1:https://developers.google.com/custom-search/docs/js/cselement-reference . Não consigo ver nada em que haja um retorno de chamada na renderização do resultado da pesquisa, apenas na inicialização. Parece loucura, embora não haja suporte para algo assim.
Aqui está o que eu tentei com v2:
(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);
})();
O console nunca produz "executado". Também noto no meu console que tenho o seguinte erro:
Tentativa de JavaScript inseguro para acessar o frame com URL about: blank from frame with URLhttp://www.google.com/cse?q=test&client=google-coop&hl=pt_PT&r=s&cx=xxxxx… S1% 2Csr1 & rurl = http% 3A% 2F% 2Flocalhost% 3A58257% 2FSearch% 3Fq% 3Dtest # escravo-1-1. Domínios, protocolos e portas devem corresponder.
Não tenho certeza se isso é importante, pois a função de pesquisa ainda funciona bem. Eu estou testando isso em localhost por http.