如何在加载后使用greasemonkey调用页面上的函数

时间:2009-01-14 15:48:59

标签: javascript greasemonkey

我有一个非常简单的greasemonkey脚本,我想在页面上调用已经存在的javascript函数。我已经阅读了文档,似乎没有任何工作

window.setTimeout(function() { 
    alert('test') // This alert works, but nothing after it does
    myFunction() // undefined
    window.myFunction() // undefined
    document.myFunction() // undefined
}, 1000);

3 个答案:

答案 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 */
}