请参阅"Accessing Variables (and Functions) from Greasemonkey to Page & vice versa。
Userscripts从目标页面分开,所以你不能只是简单地覆盖函数和变量不理解上下文...
IF功能是全球(看起来像它可能是在这种情况下),你可以inject新的功能定义:
function StartDrawing() {
// WHATEVER YOU WANT FOR THE NEW CODE GOES HERE.
}
addJS_Node (StartDrawing);
function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}
这个工程几乎支持userscripts每一个浏览器。
在某些情况下,您可能需要通过触发窗口load
事件和/或检查功能是否已存在来延迟负载。
根据您的浏览器,你可以有更多的选择(见链接的Q & A,上图):
- 在的Firefox + Greasemonkey的,您可以使用
@grant none
模式或unsafeWindow
。
- 在Chrome + Tampermonkey,通常可以使用
unsafeWindow
。 @grant none
模式可能起作用,但我自己没有测试过。
如果函数不是全局:
然后在火狐因为它来自于你必须覆盖JS源见"Stop execution of javascript function (client side) or tweak it"。
在Chrome中,你大多运气不佳(上次验证六个月前)。
只需再次定义它 – exussum