【发布时间】:2015-11-23 08:54:42
【问题描述】:
好吧,我想知道当用户改变他的位置时是否可以调用 Tampermonkey 脚本(但匹配仍然有效)。例如,我的脚本挂钩 youtube 网站。
我需要让脚本在我更改视频时自动调用,我的实际脚本是:
// ==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,但我没有找到任何东西,也许是我查看的太快了?
那么,有什么建议吗?
【问题讨论】:
-
$(document).ready(function(){ ....- 然后在每个页面加载时,它都会执行您想要的操作.. 否则它会执行一次.. 在第一次加载中间的某个地方... -
我试过这个,我想避免使用 JQuery 的第一件事,第二件事是它没有按照我的要求做,更糟糕的是因为它发生了同样的事情之前,我尝试使用 document.readystatechange,它只会使脚本无法运行。
-
对...好吧-你必须意识到 Tampermonkey 在它自己的上下文中运行......就像一个始终运行的单独网页。因此,您还需要挂钩附加脚本的页面事件。它可以是导航事件,如 onbeforeunload、onlaod 或其他通用事件。
readystatechange是一个好的开始,在 jQuery 源代码中查看它们是如何正确执行此操作的。基本上在每个页面加载时,onready 事件都会被触发并触发 tampermonkey,如果你使用它的话。否则,您的脚本会在每个选项卡上运行一次,并且不会与其他任何内容挂钩。
标签: javascript onload tampermonkey