グレースモンキーを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
が存在しない場合はどうなるかわかりません。
ドメイン-bが実行されないのは、ブラウザのドメイン間の制限が原因です。ドメイン間の制限を行い、ドメイン上のソースにアクセスできない-b何かが存在するかどうかを判断するためにDIVを読むことはできません。 @includeドメイン-bがiframe(ドメイン-b)でトリガーされ、GMスクリプトを使ってマークアップにアクセスすることを望んでいました。私は引き続き様々なアプローチを探求します。 – nopuck4you
まあ、それは私のために働いた: 'iframe'ドメインだけを' @include 'するとサードパーティのドメイン 'iframe'で実行するGreasemonkeyスクリプトを手に入れることができます。試しにサンプルコードとテストページで回答を更新しました。 – npdoty