2017-05-14 58 views
0

在這裏的大規模反語是我開始寫這個腳本作爲對StackExchange網絡上的另一個問題的答案。Greasemonkey腳本觸發每次通過谷歌即時新的查詢

我正在寫一個Greasemonkey腳本,我想在Google搜索結果上運行。 每當用戶搜索某些內容時,我希望腳本運行該命令。

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

Autplays當你查詢「定義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(); 
} 

然後我發現Google甚至不使用Ajax,但是這個解決方案應該工作嗎?

TL:DR:如何在每次將新的搜索查詢放入Google即時時觸發該腳本?

+0

你的意思是觸發:用戶鍵入搜索查詢;用戶鍵入搜索查詢後;用戶點擊搜索按鈕後;或結果頁面加載後? – EyuelDK

+0

每次結果頁面加載一組不同的結果(即用戶點擊搜索按鈕後) – SleepingGod

+0

如果我的答案是一個不足的解決方案,請讓我知道,以便我可以幫助您找到更好的解決方案。如果您對提供的解決方案感到滿意,請不要忘記標記答案。 – EyuelDK

回答

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'); 
    } 
})();