簡體   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