4

iframe 内に unbeforeunload イベントを設定した場合、たとえば iframe 内のリンクをクリックしても、これはトリガーされません。IE と Firefox で動作します (Opera ではありませんが、Opera は一般的に onbeforeunload をサポートしていません)。

不思議に思うのですが、私は何か間違ったことをしていますか?この動作は可能ではないでしょうか? それとも Google Chrome/webkit のバグですか? 回避策はありますか?

コード例:

test.html:

<html>
  <body>
    <p>Main page content</p>
    <script type="text/javascript">
      window.onbeforeunload = function() {alert('unloadevent in main window');};
    </script>
    <iframe id="tpa" src="..test2.html"></iframe>
  </body>
</html>

test2.html:

<html>
  <body>
    <script type="text/javascript">
      self.onbeforeunload = function() {alert('unloadevent in frame window');};
    </script>
    <a href="http://www.google.com/">Link to for instance google</a>
  </body>
</html>
4

4 に答える 4

2

これは現在修正されています。チケットを参照してください。

于 2013-02-27T03:43:12.633 に答える
2

私はそれを修正するための穏やかでない方法を見つけました。ドメイン「abcom」を保持する私のparentPageでは:

<html>
<iframe id="OBU" name="OBU" src="c.d.com">
</iframe>
<script>
    window.onbeforeunload = function() {
        window.frames["OBUI"].frames["SubOBUI"].location =
                "a.b.com/demo.jpg?t="+(new Date()).getTime();
    }
</script>
</html>

私の「cdcom」では:

<iframe id="SubOBUI" name="SubOBUI" src="a.b.com/demo.jpg"
        onload="someMethodThatShouldBeExecutedWhileUnload"></iframe>
<script>
    var someMethodThatShouldBeExecutedWhileUnload : function() {
            alert(1);
    }
</script>

試してみてください!

于 2011-08-11T11:20:52.887 に答える
1

Webkit で未解決の問題のようです (すぐに修正される予定はありません):

https://bugs.webkit.org/show_bug.cgi?id=19418

誰かが回避策を知っているなら、私に知らせてください。

于 2010-07-04T09:03:25.807 に答える
1

別の方法として、ドキュメント レベルで iframe リンクのクリック イベントを処理するか、iframe ページを前処理してリンクを変更し、カスタム JS ハンドラーを実行することもできます。次に、ビジネス ルールに基づいてクリック イベントの伝播を抑制します。

于 2011-08-05T14:14:38.677 に答える