7

サイトにはそのようなコードがあります(LAN上のサイト)

<script language="JavaScript" type="text/javascript">         
    alert("ble");
</script>

GMを使用してそのアラートを無効にしようとしています。私はこれをやろうとしていました

unsafeWindow.alert=function() {};

しかし、アラートが表示され、このエラーが発生します

Error: uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: file:///C:/Documents%20and%20Settings/arokitnicki/Dane%20aplikacji/Mozilla/Firefox/Profiles/sm4bsods.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: anonymous :: line 377"  data: no]

そのアラートを無効にする方法は?

PSこれはjavascriptの質問ではなく、Greasemonkeyの質問です。

編集:

その会社のウェブサイトなので、実際のコードを貼り付けることはできません

<head>
    <script>    
        dojo.require("dojo.back");
        dojo.back.init(); 
    </script>
</head>
<body onload="someMethod()">
    <iframe></iframe>
    <script>         
        alert("bla");
    </script>
</body>

ヘッダーにはいくつかのスクリプトとCSS宣言もあります。

4

2 に答える 2

8

更新: Tampermonkey、Violentmonkey、Greasemonkey の最新バージョンの場合(ただし、GM 4+ を避けるために強くお勧めし
ます) :alert()ほとんどの場合、@run-at document-start. たとえば、次のスクリプトをロードして、テスト ページにアクセスします。

// ==UserScript==
// @name    _Overwrite Alert
// @match   *://output.jsbin.com/*
// @grant   none
// @run-at  document-start
// ==/UserScript==

var alrtScope;
if (typeof unsafeWindow === "undefined") {
    alrtScope = window;
} else {
    alrtScope = unsafeWindow;
}

alrtScope.alert = function (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
};

Tampermonkey を実行している場合は、 Tampermonkey 設定=>構成モード: =>実験的=>注入モード:切り替えることで、より効果的にアラートをブロックInject Mode: Instantできることに注意してください。
Advanced Instant


スクリプトに GM_ functions が必要な場合は@grant、none 以外に設定する必要があります。その場合、exportFunction()次のように使用します。

// ==UserScript==
// @name            _Overwrite Alert
// @match           *://output.jsbin.com/*
// @grant           GM_addStyle
// @run-at          document-start
// ==/UserScript==

function myAlert (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
}
unsafeWindow.alert   = exportFunction (myAlert, unsafeWindow);


2011 年 8 月より前の Greasemonkey の古い回答:

unsafeWindow.alert=function() {};特定の状況でうまく機能します。

しかし、それが実際にページ上のコードである場合、Greasemonkey を使用してそのアラートを停止することはできません。

これは、ページの読み込み中、DOMContentLoadedイベントの前にアラートが発生するためです。これは、Greasemonkey が発生したときです。


この GM スクリプトをロードします。

// ==UserScript==
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         http://jsbin.com/*
// ==/UserScript==

unsafeWindow.alert=function() {};


次に、http: //jsbin.com/ajeqe4/6にアクセスしてください。

コード ( http://jsbin.com/ajeqe4/6/edit ) を調べると、3 つのアラートが表示されます。loadGreasemonkey は(通常)発生するアラートのみを停止できます。

他の要因により、GM のアラートを停止する機能がブロックされる可能性があります... ページの読み込みが速すぎるか、おそらく閉鎖されます。


そのページのソースを、可能な限り編集せずに、pastebin.com に貼り付けます。他にもできることがあるかもしれません。adblock を介してスクリプトをブロックしますか?

それ以外の場合は、拡張機能/アドオンを作成する必要があります。

于 2011-01-11T13:37:59.980 に答える
3

Scriptishを使用する場合、以下は常に機能します。

// ==UserScript==
// @id              alert-killer-test@erikvold.com
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         *
// @run-at          document-start
// ==/UserScript==

unsafeWindow.alert=function() {};

ユーザースクリプトはこちらから入手できます。

于 2011-03-07T01:31:48.577 に答える