Pregunta ¿Hay alguna forma de registrar una devolución de llamada de resultado de búsqueda cuando se usa Google CSE v2?


En la versión uno (v1) del código del motor de búsqueda personalizado de Google, había un método llamado .setSearchCompleteCallback lo que le permitiría llamar a algún Javascript cuando los resultados de la búsqueda hayan regresado. La documentación para ese código se puede encontrar aquí.

El objeto del motor de búsqueda se ha movido de google.search.CustomSearchControl en v1 a google.search.cse.element en v2.

los versión actual (v2) no parece tener el .setSearchCompleteCallback método, y no veo una forma de registrar una devolución de llamada para cuando finalicen los resultados de búsqueda. He experimentado con diversos grados de éxito con los métodos ajaxStart y ajax End de Jquery, pero me preguntaba si existía una forma "oficial" de hacerlo en el código CSE de Google.


8
2017-10-08 14:01


origen


Respuestas:


No es elegante, pero es lo único que pude encontrar.

Sé que la gente va a comentar sobre el uso de un intervalo que nunca termina, pero hasta que se encuentre una mejor solución, esto es lo que tenemos.

setInterval(function () {
    var resultInfo = $('.gsc-result:first');
    if (resultInfo.length && !resultInfo.data('isOld')) {
        resultInfo.data('isOld', true);

        console.log('new results');
    }
}, 500);

1
2017-09-16 20:09



Puede determinar que los resultados de búsqueda hayan cambiado al observar el código HTML de los resultados con MutationObserver.

// Where to put search results
var resultsElement = document.getElementById('results');

// Creating results box
window.google.search.cse.element.render({
    div: resultsElement,
    tag: 'searchresults-only',
    attributes: {
        overlayResults: false
    }
});

// Watching the "new results" event
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
new MutationObserver(function(mutations) {
    for (var i = 0; i < mutations.length; ++i) {
        if (mutations[i].target.classList.contains('gsc-results')) {
            console.log('Search complete!');
            break;
        }
    }
}).observe(resultsElement, {
    subtree:       true,
    attributes:    false,
    childList:     true,
    characterData: false
});

Funciona tan bien como la devolución de llamada completa de búsqueda de la V1. Los viejos navegadores no son compatibles MutationObserver pero puedes usar un polyfill para habilitarlo.


0
2017-08-15 04:34