嗯,我想知道當用戶改變他的位置(但是匹配仍然有效)時是否有可能調用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 =>元素面板=>事件監聽器窗格
在較新的版本
'$(document).ready(function(){....' - 然後在每個頁面上加載它會做你想做的事情..否則它會做一次..在第一次加載的中間... – ppumkin
我試過了,我想避免使用JQuery的第一件事,第二件事是它沒有按照我的要求做,而且更糟,因爲它發生的情況與之前一樣,我嘗試使用document.readystatechange,並且它僅使腳本不能運行。 – z3nth10n
沒錯 - 你必須認識到Tampermonkey運行在它自己的環境中,就像一個總是運行的獨立網頁。因此,您需要掛接到腳本附加的頁面事件。它可以是導航事件,比如onbeforeunload或onlaod,或者一般的東西。 'readystatechange'是一個很好的開始,請在jQuery源代碼中查看它們是如何正確執行的。基本上,在每次頁面加載時,事件onready被觸發,並觸發tampermonkey。否則你的腳本會在每個選項卡上運行一次,並且不會掛鉤其他任何內容。 – ppumkin