web-dev-qa-db-ja.com

1ページで「document.location」Javascriptリダイレクトをブロックする

スクリプトタグのdocument.locationを使用してページが再読み込みされないようにしたいサイトがあります。 Firefoxでこれを行うにはどうすればよいですか?

2
zacharyliu

実際、HTMLコードに次のようなリダイレクトのあるインラインJavaScriptブロックが含まれている場合、Greasemonkeyはブロックしません。

<script type="text/javascript">
var url = "http://google.com";
document.location.replace(url);
</script>

ただし、Greasemonkeyを使用すると、特定の関数への呼び出しをブロックできます。上書きするだけです:)。上記が次のような関数呼び出しにラップされている場合:

<script type="text/javascript">
function redirect_to(url)
{
  document.location.replace(url);
}
</script>

次に、Greasemonkeyで関数を再定義できます。

function redirect_to(url){ return true }

Firefox経由でインラインリダイレクトをブロックする

基本的にFirefoxでは、location.href.replaceなどのDOM操作を特定のサイトからいわゆる次の方法でブロックできます。 構成可能なセキュリティポリシー(CAPS)

警告の言葉:セキュリティ設定により、そのドメインからのlocation.href.replaceのすべての呼び出しがブロックされることに注意してください。アプリケーションがその呼び出しを利用する場合、一部の呼び出しを許可し、他の呼び出しをブロックする方法はありません。

location.href.replaceをブロックするようにCAPSを設定する

このタスクにはGreasemonkeyは必要ありません。 Firefoxには、サイトごとにDOMオブジェクトのプロパティ/メソッドへのアクセスを許可/禁止する機能が組み込まれています。これは構成可能なセキュリティポリシー(CAPS)と呼ばれ、 1 で説明されています。

最も単純なケースを想定した短いガイド:

  1. Firefoxを閉じる
  2. プロファイルフォルダを見つけます
  3. このフォルダー内でファイルuser.jsを見つけます。存在しない場合は、textエディター(メモ帳、vimなど)で作成します。
  4. 次の行をuser.jsに追加します。

    user_pref( "capability.policy.policynames"、 "noframebuster"); user_pref( "capability.policy.noframebuster.sites"、 " http://www.annoying-site.com "); user_pref( "capability.policy.noframebuster.Location.replace"、 "noAccess");

もちろん、ドメインをフレームのリダイレクトを防ぎたいドメインに置き換える必要があります。

私のブログ(justaddwater.dk)からより詳細な説明を見つけてください: FramebusterJavaScriptのFirefoxのヒント

2

Firefoxにあるdebugging機能を使い慣れている場合は、 watch メソッドが機能します。

document.watch('location', function() {
    return '#';
});

[〜#〜] mdn [〜#〜] で、パフォーマンスなどに関する警告の適用可能性についてはよくわかりません。おそらく、この状況で誰かがこれらについて何らかの洞察を持っているでしょう。

1
Andrew Siplas

はいスクリプト拡張子 を試してください。

はいスクリプトを使用すると、JavaScriptの実行が許可されていないサイトのブラックリストを作成できます。

0
Sky

GreaseMonkey Firefox用のアドオンは、まさにそれを行うように設計されています。

0
CarlF