14

document.location = 'http://site.tld'そのページの JavaScript コードが何かを実行したりdocument.location.href = 'http://site.tld'、ページが場所を変更する代わりに新しいタブまたはウィンドウを開くように、任意の Web ページを変更するブックマークレットを作成したいと考えています。window.open('http://site.tld')コードが;の場合と同じです。

この目標を達成するためにプロトタイプを修正することはできますか? (プロトタイプの変更については何度か読んだことがありますが、実際に行ったことがないため、この言葉を不用意に使用しています。) または、他の方法はありますか?

4

5 に答える 5

8

使用しているブラウザーはわかりませんでしたが、これを達成するために私が考えることができる唯一Object.watchの方法は、Firefox の を使用することです。

document.watch('location', function(prop, oldval, newval) {
    window.open(newval);
    return '#';
});

これは、 を設定しようとすると介入し、document.location代わりに同じ引数でウィンドウを開き、代わりに割り当てを に変更し'#'ます (通常は何もしません)。

ブックマークレット形式で、 と の両方をカバーするようにdocument.location拡張window.location:

javascript:(function(){var handle=function(prop, oldval, newval){window.open(newval); return '#';};document.watch('location',handle);window.watch('location',handle);})();

document.location.hrefしかし、これでも;への代入に対しては機能しません。Object.watch場所オブジェクトは、作業を拒否する特別なものです。

それだけでは不十分な場合は、onbeforeunloadナビゲートしてキャンセルしようとしたときにプロンプ​​トを表示するために使用できます (それがここでの目標である場合)。

私が持っている最高のもの、ごめんなさい!

于 2013-01-18T02:24:36.447 に答える
3

ES5 Object.definePropertyの使用を提案するつもりでしたが、当然のことながら、 document.location は「構成可能: false」オブジェクトであり、変更できないことを意味します。興味深いことに、変更できる場合、コードは次のようになります。

Object.defineProperty(document.location, 'href', {
     get: function() { return this.href },
     set: function(value) { this.href = value; window.open(value); return false} //Not sure about this part, but anyways...
});

編集:あなたの質問に答えて、これはブックマーレットで達成できるとは思いません。

于 2013-01-24T04:28:33.643 に答える
2

さまざまな方法を試しましたが、ターゲット ウィンドウの href を追跡することはほとんど不可能です。

使用する

window.onbeforeunload = function(e) {
    window.open(document.location.href);
};

現在のウィンドウを別のタブで開き、ターゲットを現在のウィンドウで開きます。問題は、ウィンドウの場所を変更したときだけでなく、ウィンドウを閉じたり更新したりしても onbeforeunload がトリガーされることです。どこで使いたいかによります。

PS:

window.onunload = function() {
    document.location = document.location;
}

これをテストすると、ページの場所を変更すると、アドレス バーに新しい URL が表示され、現在のページにリダイレクトされます。新しい目標を達成できませんでした。幸運を!

于 2013-01-23T11:37:51.560 に答える
1

代入ではなく関数呼び出しである場合にのみ、プロトタイプで何かを行うことができます。たとえば、document.write の場合

document.write = function(txt) {
   alert("txt");
};

document.write("test");   
于 2013-01-18T12:16:10.990 に答える
-1

FWIW: これは最新の Firefox で動作し、選択したテキストを新しいタブで検索します。

javascript:Qr=document.getSelection();if(!Qr){void(Qr=prompt('Keywords...',''))};if(Qr)window.open(" http://google. com/search?query= "+escape(Qr));void(0)

于 2014-01-06T18:57:36.597 に答える