私にはトリッキーなシナリオがあります-どんな助けでもいただければ幸いです。
iframe内に子ページを持つ親ページがあります。これがHTMLの例です:
親ページの場合:
<html>
<body>
<a id="banana">Banana</a>
<iframe src="ChildPage.html" />
</body>
</html>
そして、ChildPage.htmlの場合:
<html>
<body>
<form>
<input type="submit" value="Submit" />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$('#banana', top.document).click(function() {
alert('hello world');
});
</script>
</body>
</html>
送信ボタンがクリックされたときに何が起こるかを観察します。クリックハンドラーがバナナリンクに2回バインドされ、2つのアラートダイアログが表示されます。
この場合、複数のバインディングを防ぐ通常の手法は機能しません。
// This doesn't work either
var clickHandler = function() {
alert('hello world');
};
$('#banana', top.document).unbind(clickHandler).bind(clickHandler);
これは、iframeを送信すると、clickHandlerが以前のclickHandlerとは異なり、新しいオブジェクトとして扱われるためです。
興味深いことに、名前空間も機能しません。名前空間コンテキストは、バインドされている要素に関連付けられているのではなく、名前空間を作成したウィンドウ内にあるようです。
// This still doesn't work either
$('#banana', top.document)
.unbind('click.myns')
.bind('click.myns', function() {
alert('hello world');
});