3

greasmonkeyスクリプトを作成しているWebページがあります。このページにはいくつかのiframeがあります。それらが問題であることがわかりましたが、問題を解決する方法がわかりません。

最初に、私のスクリプトはボタン付きの小さなdivボックスを作成します。ボタンを押すことにより、スクリプトはWebページのコンテンツを分析alertし、特定の条件で呼び出します。

documentFirefoxのJavascriptコンソールは、私のスクリプトがdocument.getElementByIDdivボックスが追加されている最上位のドキュメントの本文を見つけるために使用しているため、アクセスが拒否されたことをすでに私に叫んでいます。

スクリプトが失敗してiframeでスタックするため、これは簡単に回避できる問題ですが、へのアクセスを許可するため、メインページで続行されますdocument

関数でアラートを使用しようとすると、問題が発生します。iframeが私のスクリプトを引き継ぎ、。でスクリプトを強制終了するようPermission denied to access property 'alert'です。

ブラウザ/スクリプトなどに、スクリプトをメインドキュメントでのみ実行し、iframeに煩わされたくないことを伝えるにはどうすればよいですか?NO-scriptアドオンをインストールし、プライマリドメインを許可し、セカンダリドメインをブロックしました( iframe内に読み込まれます)、すべてのアラートメッセージは正常になります。しかし、noscriptをインストールして特定のドメインを有効/無効にするようにユーザーに依頼することはできず、スクリプトは正常に機能するはずです。すべてのiframeを有効にして動作するソリューションを見つける必要があります。

紛らわしく聞こえないことを願っています。

助けてくれてありがとう。

4

1 に答える 1

5

RE:

ブラウザ/スクリプトなどに、スクリプトをメインドキュメントでのみ実行し、iframeに煩わされたくないことを伝えるにはどうすればよいですか?NO-scriptアドオンをインストールし、プライマリドメインを許可し、セカンダリドメインをブロックしました( iframe内に読み込まれます)、すべてのアラートメッセージは正常になります。

まず、包含ディレクティブと除外ディレクティブを調整して、iframeを可能な限り無視します。例えば:

// @include  http://example.com/normal/*
// @include  http://example.com/extra/*
// @exclude  http://example.com/extra/in_iframe/*


次に、メタデータブロック の後のコードの最初の行としてこれらの2行を追加します。

if (window.top != window.self)  //-- Don't run on frames or iframes
    return;

これにより、GMスクリプトがiframeで実行されなくなります。

于 2011-04-30T19:36:05.517 に答える