28

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

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

3 回答 3

27

尝试使用: unsafeWindow.myFunction();

更多细节和信息 - http://wiki.greasespot.net/UnsafeWindow

于 2009-01-14T15:56:24.303 回答
17

在原始页面中调用函数的一种方法是这样的:

location.href = "javascript:void(myFunction());";

这有点难看。GreaseMonkey 也提供了unsafeWindow,但作者建议不要使用它。

unsafeWindow.myFunction();

看起来更整洁,但请确保您了解其后果。从手册:

unsafeWindow 绕过了 Greasemonkey 的基于 XPCNativeWrapper 的安全模型,该模型的存在是为了确保恶意网页无法更改对象,从而使greasemonkey 脚本(其执行权限比网页中运行的普通 Javascript 更多)执行其作者的操作或用户无意。因此,用户脚本应避免调用或以任何其他方式依赖于 unsafeWindow 上的任何属性 - 特别是如果它们是针对任意网页执行的,例如带有 @include * 的网页,其中页面作者可能以这种方式颠覆了环境。

换句话说,如果您使用 unsafeWindow,您的脚本会提升原始页面脚本可用的权限。

于 2009-01-14T15:57:00.950 回答
7

您可以尝试使用 javascript 事件侦听器。

这些在响应发生的对象事件(例如页面加载)时执行代码

例如,要在页面加载时执行代码:

window.addEventListener('load', function () 
{
    /* code goes here */
});
于 2009-02-03T01:21:24.877 回答