Greasemonkey:拦截内联onload事件

时间:2012-05-26 09:36:11

标签: greasemonkey onload

是否可以通过GreaseMonkey修改/删除<body onload="...">事件?

有问题的代码是:

<body onload="if (document.body.scrollIntoView &amp;&amp; (window.location.href.indexOf('#') == -1 || window.location.href.indexOf('#post') &gt; -1)) { fetch_object('currentPost').scrollIntoView(true); }">

我想完全阻止它执行(即使URL中没有哈希,这也是一个令人讨厌的vBulletin功能,当使用“后退”按钮时,它显然也会触发)。

1 个答案:

答案 0 :(得分:2)

是的,只要DOM可以与Greasemonkey交互使用,就可以通过覆盖<body onload="..." ...来拦截它(可能也可以在Chrome中使用,但是没有经过测试)。

这有效:

// ==UserScript==
// @name        _Block inline onload function
// @namespace   _pc
// @include     http://YOUR_SERVER/YOUR_PATH/*
// @run-at      document-start
// ==/UserScript==

document.addEventListener ("readystatechange", FireWhenReady, true);

function FireWhenReady () {
    this.fired  = this.fired || false;

    if (    document.readyState != "uninitialized"
        &&  document.readyState != "loading"
        &&  ! this.fired
    ) {
        this.fired = true;

        document.body.onload  = function () {
            console.log ("body onload intercepted.");
        };
    }
}