2009-11-05 5 views
8

あなたはGreasemonkeyをiframeに対してのみ実行でき、それは親ウィンドウではないと思っています。親ウィンドウはドメインA、iframeはドメインB、スクリプトのインクルードは@include http://domain-B.com/path/ *です。@includeを使ったiframeに対するGreasemonkey - これは機能しますか?

親とのやりとりは必要ありません。私はこれを数回試して成功しませんでした。誰かがiframeに対して実行することを妨げるクロスドメイン制限がありますか?

PS:iframeにはトップページとして読み込むことを妨げるJSコードがあります。

答えて

11

グレースモンキーをiframeに対して実行させることは間違いありません。実際にはiframeやメインページでの実行を停止する方法を決定するのはcommon questionです。あなたは、トップウィンドウ上で実行されるからコードを防ぐために、その答えの逆を取ることができる必要があります:

if (window.top == window.self) //don't run on the top window 
    return; 
//rest of the actual executing code goes here 

私はそれをテストしてみたあなたは、ドメインB(iframeのドメイン)と一致する@includeを使用することができますし、それを変更する任意のコードを実行してください。 test pageで次のテスト用のユーザースクリプトを実行し、Googleのロゴを正常に非表示にします(Googleがiframeの場合のみ)。

// @include http://www.google.com* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// ==/UserScript== 

if (window.top == window.self) //don't run on top window 
    return; 

alert('running on a frame'); 

$('img').each(function() { 
    $(this).hide(); 
}); 

ここまでのところ、ドメイン間の制限はありません。ページが最初にロードされたとき(Greasemonkeyが実行されているとき)、iframeが存在しない場合はどうなるかわかりません。

+0

ドメイン-bが実行されないのは、ブラウザのドメイン間の制限が原因です。ドメイン間の制限を行い、ドメイン上のソースにアクセスできない-b何かが存在するかどうかを判断するためにDIVを読むことはできません。 @includeドメイン-bがiframe(ドメイン-b)でトリガーされ、GMスクリプトを使ってマークアップにアクセスすることを望んでいました。私は引き続き様々なアプローチを探求します。 – nopuck4you

+0

まあ、それは私のために働いた: 'iframe'ドメインだけを' @include 'するとサードパーティのドメイン 'iframe'で実行するGreasemonkeyスクリプトを手に入れることができます。試しにサンプルコードとテストページで回答を更新しました。 – npdoty

関連する問題