代码之家  ›  专栏  ›  技术社区  ›  anschauung

一个人是如何让Greasemonkey在页面上的任何东西之前运行的?

  •  4
  • anschauung  · 技术社区  · 16 年前

    以前可以运行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 回复  |  直到 13 年前
        1
  •  2
  •   Kornel    16 年前

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

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

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

    歌剧院解决了这个问题 UserJS 通过射击 BeforeScript 事件,允许userjs在最后一刻更改/删除脚本。

        2
  •  3
  •   Brock Adams    13 年前

    事实上, @run-at document-start 几乎在页面上的任何内容之前运行gm脚本。

    在您的情况下,以下代码将与 @在文档开始时运行 :

    _oldAlert           = alert;
    unsafeWindow.alert  = function () {};
    
    /*-- Optionally, wait for the DOM, then set an onload handler to restore
        alert().
    */
    
        3
  •  -1
  •   Assaf Lavie    16 年前

    你试过了吗?

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