如何让Greasemonkey运行*页面中的任何*其他*之前?

时间:2009-04-02 03:07:36

标签: javascript greasemonkey

是否可以在页面上的任何之前运行Greasemonkey脚本?

我知道@run-at document-start,但这似乎是在<HTML>标记之后立即运行的。通常这不是问题,但如果页面格式错误,如下例所示,似乎没有任何我可以做的事情。

我很感激任何建议或想法。 谢谢!

<script>alert('This is an annoying message.');</script>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
...etc...

3 个答案:

答案 0 :(得分:3)

实际上,@run-at document-start 确实在页面中的任何内容之前运行GM脚本。

在您的情况下,以下代码将与@run-at document-start

一起使用
_oldAlert           = alert;
unsafeWindow.alert  = function () {};

/*-- Optionally, wait for the DOM, then set an onload handler to restore
    alert().
*/

答案 1 :(得分:2)

这是不可能的,因为HTML要求在解析期间执行脚本或根本不执行脚本,例如这是允许的:

<script> document.write('<!'+'--'); </script>

如果浏览器超过此脚本而不执行它,它将看到完全不同的文档,因此在脚本运行之前无法分析HTML文档的DOM。

Opera通过触发BeforeScript事件在UserJS中解决了这个问题,允许UserJS在最后一刻更改/删除脚本。

答案 2 :(得分:-1)

你试过了吗?

(function() {
    var yourFunction = function() 
    {
       // ...
    }
    window.addEventListener("load", yourFunction, false);
})();