2015-08-28 142 views
2

嗯,我想知道當用戶改變他的位置(但是匹配仍然有效)時是否有可能調用Tampermonkey腳本。例如,我的腳本掛鉤了YouTube網站。回想一下當頁面位置發生變化時的Tampermonkey腳本

我需要做的是,腳本本身回憶說,當我改變了視頻,我實際的腳本是:

// ==UserScript== 
// @name  xxx 
// @namespace xxx 
// @version  1.0 
// @description xxx 
// @author  Ikillnukes 
// @match  https://www.youtube.com/* 
// @match  https://youtu.be/* 
// @grant  none 
// ==/UserScript== 

console.log("Tampermonkey hook!"); 
var script = document.createElement('script'); 
script.src = document.location.protocol+"//xxx"; 
(document.body || document.head || document.documentElement).appendChild(script); 

正如你可以看到我打電話的console.log調試它,它被調用時,我刷新或我第一次加載網頁。但有一次,我改變了它不再被調用的視頻,這就是我想要避免的。

我也回顧了這個:http://tampermonkey.net/documentation.php,我沒有找到任何東西,也許我檢查得太快了?

那麼,有什麼建議嗎?

window.addEventListener("spfrequest", function(e) { console.log("requesting new page") }); 
window.addEventListener("spfprocess", function(e) { console.log("new page is processed") }); 
window.addEventListener("spfdone", function(e) { console.log("new page is displayed") }); 

提示爲Chrome用戶找到這樣的事件:
使用DevTools =>元素面板=>事件監聽器窗格

在較新的版本

+0

'$(document).ready(function(){....' - 然後在每個頁面上加載它會做你想做的事情..否則它會做一次..在第一次加載的中間... – ppumkin

+0

我試過了,我想避免使用JQuery的第一件事,第二件事是它沒有按照我的要求做,而且更糟,因爲它發生的情況與之前一樣,我嘗試使用document.readystatechange,並且它僅使腳本不能運行。 – z3nth10n

+0

沒錯 - 你必須認識到Tampermonkey運行在它自己的環境中,就像一個總是運行的獨立網頁。因此,您需要掛接到腳本附加的頁面事件。它可以是導航事件,比如onbeforeunload或onlaod,或者一般的東西。 'readystatechange'是一個很好的開始,請在jQuery源代碼中查看它們是如何正確執行的。基本上,在每次頁面加載時,事件onready被觸發,並觸發tampermonkey。否則你的腳本會在每個選項卡上運行一次,並且不會掛鉤其他任何內容。 – ppumkin

回答

7

通過YouTube的腳本定義使用自定義YouTube SPF events Chrome:
使用DevTools => Sources面板=>事件監聽器(不是斷點)

+0

謝謝,但我仍然有我最初的問題,並且是由於某種原因代碼不希望執行內部,或至少部分。 我會解釋它,讓我編輯帖子;) – z3nth10n

+0

也許這是很好的把這兩種方式,爲46用戶和其他44用戶。 – z3nth10n

+0

是的,你的回答是正確的,問題是我的,我會盡量快速解決,我會在幾分鐘之內。 – z3nth10n

相關問題