0

特定のサイトにアクセスするたびにGM_xmlhttpRequestを作成するGreaseMonkeyテストスクリプトを作成しています。GM_xmlhttpRequestは、最初に見つかった「ドキュメント」(親ウィンドウ)でのみトリガーする必要があり、iframeおよびその他の子ウィンドウを無視する必要があります(iframeのURLは必要ありません)。

いくつかの考えと可能な解決策:

1)GM_xmlhttpRequestonload-callbackにブレークを挿入しようとしました。結果:スクリプトが応答しません。FireBugにエラーメッセージはありません。(ブレークはループでのみ機能すると思います。)

onload: function(response) {
    if (response.status == 200) break;
}

2)GM_xmlhttpRequestの前後にaddEventListenerを挿入します。結果:スクリプトが応答しません。FireBugにエラーメッセージはありません。

document.addEventListener("load",
// (Insert the GM_xmlhttpRequest code here - see below)
,false);

3)アイデア:最初にリクエストが成功した後、GM_xmlhttpRequestを「キャンセル」できますか?onload-part内、またはスクリプトの後(document.removeEventListenerがdocument.addEventListenerをキャンセルするなど)。

4)アイデア:GreaseMonkeyは親ウィンドウを識別できますか?では、スクリプトは親ウィンドウでのみ実行されますか?

また、スクリプトの速度が低下するため、同期呼び出しとしてスクリプトを作成しないことをお勧めします。

// ==UserScript==
// @name            GreaseMonkey xmlhttpRequest test
// @include         http://www.jp.dk/*
// ==/UserScript==

GM_xmlhttpRequest({
    method: "POST",
    url: "http://localhost/do_stuff",
    data: "url=" + document.location.href,
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    onload: function(response) {
        if (response.responseText)
            alert("GreaseMonkey said: " + response.responseText);
    }
});
4

1 に答える 1

0

これはフレームバスタースクリプトと呼ばれます:

if (window === parent) {
  // Trigger!
}
于 2010-01-21T19:53:27.757 に答える