我有一个非常简单的greasemonkey脚本,我想在页面上调用已经存在的javascript函数。我已经阅读了文档,似乎没有任何工作
window.setTimeout(function() {
alert('test') // This alert works, but nothing after it does
myFunction() // undefined
window.myFunction() // undefined
document.myFunction() // undefined
}, 1000);
答案 0 :(得分:26)
尝试使用: unsafeWindow.myFunction();
更多详情和信息 - http://wiki.greasespot.net/UnsafeWindow
答案 1 :(得分:17)
在原始页面中调用函数的一种方法是这样的:
location.href = "javascript:void(myFunction());";
有点难看。 GreaseMonkey也提供了unsafeWindow,但作者建议不要使用它。
unsafeWindow.myFunction();
看起来更整洁,但请确保您了解其后果。从手册:
unsafeWindow绕过Greasemonkey 基于XPCNativeWrapper的安全模型, 这是为了确保这一点 恶意网页无法改变 对象以这样的方式制作 greasemonkey脚本(执行 拥有比普通人更多的特权 在网页上运行的Javascript) 他们的作者或用户所做的事情 不打算。用户脚本应该 因此,避免打电话或任何 其他方式取决于任何属性 在unsafeWindow上 - 特别是如果他们 为任意网页执行, 比如@include *,其中 页面作者可能已经破坏了 这样的环境。
换句话说,如果您使用unsafeWindow,您的脚本会提升原始页面脚本的可用权限。
答案 2 :(得分:7)
您可以尝试使用javascript事件侦听器。
这些执行代码响应发生的对象事件(例如页面加载)
例如,要在页面加载时执行代码:
window.addEventListener('load', function ()
{
/* code goes here */
}