每次通过Google即搜即得新查询时都会触发Greasemonkey脚本

时间:2017-05-14 15:42:52

标签: javascript jquery greasemonkey google-search

这里有大量讽刺意味着我开始编写这个脚本作为StackExchange网络上另一个问题的答案。

我正在写一个Greasemonkey脚本,我希望在Google搜索结果中运行。 每当用户搜索我希望脚本运行命令的东西时。

document.querySelector(".lr_dct_spkr > input:nth-child(1)").click();

在Google中搜索“define x”时自动播放音频

然而,我很快意识到只需将其写入脚本底部就意味着它只会在搜索结果第一次加载时被触发,我需要它在每次新查询(或一组搜索结果出现)时触发。我最初认为这可能是一个Ajax问题,并尝试使用waitForKeyElement函数解决它,但无论我等待什么样的元素,我似乎无法触发它(等待的最佳元素是定义出现的卡片在,但它真正重要的是什么元素)。

// @include     www.google.com/*
// @require https://git.io/vMmuf
// @version     1
// @grant       none
// ==/UserScript==
$.waitForKeyElements ("div.lr_dct_ent_ph",launchsound);

function launchsound(){
    document.querySelector(".lr_dct_spkr > input:nth-child(1)").click();
}

然后我发现谷歌甚至不使用Ajax,但这个解决方案应该可行吗?

TL:DR:如何编写每次将新搜索查询放入google instant时触发的脚本?

1 个答案:

答案 0 :(得分:1)

解析URL以查明是否已回复搜索查询,即您是否在结果页面上。

// ==UserScript==
// @name    My Userscript
// @include https://www.google.com/search?*
// @require https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.10/URI.min.js
// @grant   GM_setValue
// @grant   GM_getValue

// ==/UserScript==

(function() {
    'use strict';

    var currentSearch = URI.parseQuery(window.location.search).q;
    var lastSearch = GM_getValue('lastSearch');
    if (currentSearch != lastSearch) {
        GM_setValue('lastSearch', currentSearch);
        console.log('Do Whatever You Want HERE');
    }
})();