2009-06-07 9 views
0

ページにiframeを追加するGreasemonkeyスクリプトがあります(ページ1)。 iframeには別のページが含まれています(ページ2)。スクリプトは2ページでも実行されます。ページ1とページ2は異なるドメインにあります。Greasemonkeyを使用してiframeの親の関数を呼び出す方法

ページ2で実行されているコードでページ1の関数を呼び出すことを許可したいと思います.Greasemonkeyコードの制限が低い場合、これは可能ですか?

答えて

1

ドメインが異なるため、ブラウザがこれを防止します。

あなたは、フレーム間の通信に使用できるトリックのカップルがあります:

  1. は、外側のウェブサイトのドメイン(www.somewebsite.comとsomeapp.somewebsite.com)に他のウェブサイトのDNSレコードを追加します。 。次に、両方のページのJavaScriptでdocument.domain = "somewebsite.com"を使用します。
  2. フレーム間で通信するには、HTML 5 postMessage()を使用します。 Firefox 3とInternet Explorer 8では動作しますが、IE 7では動作しません。
  3. 親ウィンドウのURLを設定することで、別のページに簡単なメッセージを渡すことができます。 注:ブラウザは親URLの設定を妨げます。このメソッドは、親フレームから子フレームへの片方向通信でのみ機能します。

広告3: 他のフレームのURLを読み取ることはできませんが、設定することはできます。あなたは正確に同じページにURLを変更しますが、URLに#anchorコンポーネントと、ページが実際にリロードしない場合:

window.frames["childFrame"].location.href = "http://www.somewebsite.com/#message" 

その後、定期的にその外側のページにスクリプトを追加する必要があるだろうそれはlocation.hrefをポーリングし、メッセージを処理します。はい、それは醜いですが、正しく行えば、すべての一般的なブラウザで動作します。

+1

、postMessage()はうまくいきます。私の考えは、Greasemonkeyスクリプトに与えられた権限を悪用して、同じドメイン制限を回避することでした。これの方が良い; postMessage()は実際にこれを意図しています。 :) – Peeja

+0

私は今IE7をサポートしなければならないので、私はpostMessage()をあきらめました。私は#1もできません。 #3私はすることができますが、私はそれを働かせることはできません。 FF3では少なくとも、親の現在のURLにもwindow.parent.location.hrefを設定する権限はありません。何か不足していますか? – Peeja

+0

ええと、私は親フレームから埋め込みフレームへの通信にのみこのメソッドを使用しました。フレームが途切れることを防ぎ、自分自身をトップページにすることを防ぐための制限があると思われます。 – Thorarin

関連する問題