2

XMLHTTPRequest を介して特定のページのすべてをローカル ネットワーク ドメインに「再リンク」したいと考えています。ユーザースクリプトが実際に実行されたときではなく、リンクがクリックされたときに実行したいことを除いて、それはGreaseMonkey/NinjaKitのGM_xmlhttpRequestにつながります...

だから私は次のようなものを持っています:

links = document.getElementsByTagName('a');
for (i = 0; i < links.length; i++) {
    oldhref = links[i].getAttribute('href');
    links[i].setAttribute('href', 'javascript:loadLink(' + oldhref + ')');
}

unsafeWindow を使用するか、スクリプト要素をドキュメントに追加してloadLink関数を挿入できることを理解しています。しかし、 loadLinkGM_xmlhttpRequest
を使用するにはどうすればよいですか?

0.7.20080121.0 互換性ページを見ましたが、それが必要なものかどうかわかりません...

ページにiframeを追加することも検討しましたが、変更されたリンクはiframe内にロードされます(ユーザースクリプトを再度トリガーします)が、よりクリーンなソリューションを好む...

4

2 に答える 2

1

わかりましたので、GreaseMonkeyの公式の回避策をうまく機能させることができました(最初に何を間違えたのかわかりません):

unsafeWindow.loadLink = function(href) {
    setTimeout(function(){
        GM_xmlhttpRequest({
            //wtv
        });
    },0);
}

しかし、unsafeWindowがある場合は、それを使用しないソリューションを好むでしょう... (特に、これは非常に間違っていると感じているため...)

于 2012-03-07T16:00:53.383 に答える
1

ページ コンテキスト内で GM 関数を使用する必要はほとんどありません。また、これまでに投稿されたコードから、unsafeWindowこの場合も必要ありません。

hrefまた、これまでに掲載したものについては、書き換える必要はありません。

このようなものは、あなたが望むものを達成します:

var links = document.getElementsByTagName ('a');

for (var J = 0, len = links.length;  J < len;  ++J) {
    links[J].addEventListener ("click", myLoadLink,   false);
}

function myLoadLink (zEvent) {
    zEvent.preventDefault();
    zEvent.stopPropagation();

    var targetHref = zEvent.currentTarget.getAttribute ('href');

    GM_xmlhttpRequest ( {
        //wtv
    } );

    return false;
}


またはjQueryで:

$("a").click (myLoadLink);

function myLoadLink () {

    var targetHref = $(this).attr ('href');

    GM_xmlhttpRequest ( {
        //wtv
    } );

    return false;
}
于 2012-03-08T10:10:26.293 に答える