8

在 Google 的自定义搜索引擎代码的第一版 (v1) 中,有一个方法被调用.setSearchCompleteCallback,它允许您在搜索结果返回时调用一些 Javascript。可以在此处找到该代码的文档。

搜索引擎对象已从google.search.CustomSearchControlv1 移至google.search.cse.elementv2。

当前版本(v2)似乎没有该.setSearchCompleteCallback方法,并且我看不到在搜索结果完成时注册回调的方法。我已经尝试使用 Jquery 的 ajaxStart 和 ajaxEnd 方法取得不同程度的成功,但我想知道 Google CSE 代码中是否有“官方”方法可以做到这一点。

4

2 回答 2

2

不优雅,但我能找到的唯一东西。

我知道人们会评论使用永无止境的间隔,但在找到更好的解决方案之前,这就是我们所拥有的。

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

        console.log('new results');
    }
}, 500);
于 2014-09-16T20:09:39.980 回答
0

您可以通过使用 MutationObserver 查看结果 HTML 代码来确定搜索结果已更改。

// 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
});

它和 V1 的搜索完成回调一样好用。旧浏览器不支持MutationObserver,但您可以使用polyfill来启用它。

于 2017-08-15T04:34:54.403 回答