用Greasemonkey替换外部脚本

时间:2013-09-24 21:35:56

标签: greasemonkey

网页使用外部脚本:

<script src="script/alerts.js" type="text/javascript"></script>

在这个脚本文件中有一个我想修改/替换的功能。 该函数如下所示:

function SayHello(msg1, msg2){
    alert(msg1);
    alert(msg2;
    // just saying hi and doing something i don't want to
}

我想把它改成这样的东西:

function SayHello(msg1, msg2){
    // not saying hello
    // but i'm doing everything i want to
}

如何在不使用unsafeWindow的情况下执行此操作?

注意:该函数必须在内容页面范围内执行,而不是在Greasemonkey沙箱中执行。

2 个答案:

答案 0 :(得分:2)

就这么简单:

location.assign("javascript:void(SayHello = function () {})");

即使您需要使用任何GM_ *功能,它仍然有效。 (@grant)

答案 1 :(得分:0)

除非您在不安全的窗口中运行代码,否则无法对unsafeWindow执行某些操作。

然而,你可以做的是重新定义方法,如:

SayHello = function (msg1, msg2){
    // not saying hello
    // but i'm doing everything i want to
}

它将用这个替换原来的功能。

你还应该记住,你不能只使用greasemonkey进入闭包,并且你不能在脚本第一次运行时替换已复制到局部变量的方法。