2012-05-26 59 views
2

是否可以通過GreaseMonkey修改/刪除<body onload="...">事件?Greasemonkey:攔截內嵌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); }"> 

我想完全阻止其執行(這是一個惱人的vBulletin功能滾動至後即使沒有哈希值是出現在URL,這顯然當使用「後退」按鈕時也會觸發)。

回答

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."); 
     }; 
    } 
}