繁体   English   中英

Greasemonkey 如何在页面中的 *anything* 之前运行?

[英]How does one have Greasemonkey run before *anything* else in the page?

是否可以在页面上的任何其他内容之前运行 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...

实际上, @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().
*/

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

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

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

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

你有没有尝试过:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM