9

window.locationドキュメントの冒頭で、Greasemonkey を使用して を選択的に無効にしようとしています。

JavaScript を完全に無効にしたくはありません。JavaScript で行われたリダイレクトを無効にするだけです。それらは次のようになります。

window.location = "unwanted url";
4

3 に答える 3

6

ありえないと思います。

  • プロパティまたはメソッドを上書きすることはできませんwindow.location(サイレントに失敗します)
  • でプロトタイプを再定義することはできませんlocation.__proto__ = Something.prototype
  • location.constructor.prototype基本的にObject.prototype
  • コンストラクターは実際には何もしません (属性やメソッドの作成など)
  • __definesetter__静かに失敗する
  • Object.defineProperty次のようなエラーが発生します。TypeError: Cannot redefine property: href
  • delete window.locationそしてdelete window.location.href何もしないでください

私はアイデアがありません...

于 2013-08-17T04:38:04.623 に答える
5

window.locationこれは の「ネイティブ プロパティ」であり、構成可能windowではないため、プロトタイプを変更することはできません。

Firefox (Greasemonkey) でこれをオーバーライドしようとすると、次のようなエラーが発生します。

TypeError: 構成不可能なプロパティ 'location' を再定義できません

エラー: ネイティブ プロパティをシャドウする権限が拒否されました

...あなたがそれを試みる方法に応じて。他のブラウザでも同様のエラーが発生します。


この種の再配置をブロックするには、ケースバイケースでページの JavaScript に干渉する必要があります。

Firefox で機能する一般的な方法については、「Javascript 関数の実行を停止する (クライアント側) または微調整する」を参照してください。ターゲット ページの正確なコードによっては、はるかに簡単な場合もあります。

于 2013-08-17T06:25:37.797 に答える
-3

かなり遅すぎますが、スクリプト全体を削除せずに簡単に実行できますObject.prototype.watch

window.watch('location', function( attr ,_ , target){
    if(target.indexOf('unwanted url') !== -1)return '#';
});
于 2015-05-11T18:58:00.937 に答える