在谷歌浏览器中没有触发iframe上的onbeforeunload事件,适用于IE,Firefox

时间:2010-07-03 12:21:27

标签: iframe google-chrome onbeforeunload

如果您在iframe中设置了unbeforeunload事件,则在您点击iframe中的链接时不会触发此事件。它适用于IE和Firefox(不是Opera,但Opera在一般AFAIK中不支持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 个答案:

答案 0 :(得分:2)

我发现了一种修复它的ungentle方法。 在我的parentPage中包含域“a.b.com”:

<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>

在我的“c.d.com”中:

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

试一试!

答案 1 :(得分:2)

现在已修复。 See Ticket.

答案 2 :(得分:1)

似乎这是webkit中的一个开放性问题(并且不会很快修复):

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

如果有人知道变通方法,请告诉我。

答案 3 :(得分:1)

替代方法可能是在文档级别处理iframe链接中的click事件,或者预处理iframe页面并更改链接以执行自定义JS处理程序。然后根据您的业务规则禁止点击事件的传播。