有没有办法在使用Google CSE v2时注册搜索结果回调?

时间:2012-10-08 14:01:00

标签: javascript google-custom-search

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

搜索引擎对象已从v1中的google.search.CustomSearchControl移至v2中的google.search.cse.element

current version (v2)似乎没有.setSearchCompleteCallback方法,我找不到在搜索结果完成时注册回调的方法。我已经尝试过使用Jquery的ajaxStart和ajaxEnd方法取得不同程度的成功,但我想知道是否有一种“官方”的方式来构建Google CSE代码。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

$representations = Representation::selectRaw('id, city, round(6371 * acos(cos(radians(45.0)) * cos(radians(latitude)) * cos(radians(longitude) - radians(2.7)) + sin(radians(45.0)) * sin(radians(latitude)))::numeric, 1) < 50 AS distance')
    ->where('distance', '<', 50)
    ->limit(10)
    ->get();

它与V1的搜索完整回调一样好用。旧浏览器不支持// 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 }); ,但您可以使用a polyfill启用它。