iframe から親ウィンドウのスコープでイベントを発生させてリッスンすることはできますが、iframe のスコープで iframe からイベントを発生させて親ウィンドウでリッスンすることはできません。たとえば、親でウィンドウ、私はiframeと、その本体で発生したイベントをリッスンするためのjqueryコードをいくつか持っています
<iframe id="myframe" src="/vf-install.php" width="500" height="500"></iframe>
jQuery('#myframe').contents().find("body").on('foo',function(){
alert('foo');
});
iframe でイベントを発生させます。
<script type="text/javascript">jQuery("body").trigger("foo");</script>
イベントがトリガーされません。補足として、次のように iframe から親ウィンドウでイベントをトリガーできます。
parent.jQuery("body").trigger("foo");
しかし、それは私には受け入れられません。理由は、iframe 経由で含まれている vf-install.php が私のプログラムのインストーラーであるためです。iframe にインストーラーを含む qUnit を使用して回帰テストを作成し、インストール ボタンをクリックすると、インストーラーが完了する (イベントが発生する) ときにテストがアサーションを行います。したがって、iframe 経由で含まれるのはテスト中のみです。実際のユーザーはページを直接呼び出しますが、そこにない親ウィンドウでイベントを発生させたくありません。
また、これが「ライブクエリ」関連の問題である場合に備えて、load() が呼び出されたときにイベントリスナーを iframe の本体にアタッチしようとしました (ajax がページを変更した後、イベントはバインドされません)。
jQuery('#myframe').load(function(){
// attach the event listener like above
});