Событие onbeforeunload на iframe не запускается в Google Chrome, работает в IE, Firefox - PullRequest
4 голосов
/ 03 июля 2010

Если вы устанавливаете событие unbeforeunload внутри iframe, оно не срабатывает, когда вы, например, переходите по ссылке в iframe.Он работает в IE и Firefox (не Opera, но Opera не поддерживает встроенную загрузку вообще AFAIK).

Просто интересно, я что-то не так делаю?Разве такое поведение не возможно?Или это ошибка в 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 ]

2 голосов
/ 27 февраля 2013

Это исправлено сейчас. См. Билет.

2 голосов
/ 11 августа 2011

Я нашел 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 голос
/ 05 августа 2011

Альтернативой может быть обработка события click в ссылках iframe на уровне документа или предварительная обработка страницы iframe и изменение ссылок для запуска вашего собственного обработчика JS. Затем подавите распространение события click на основе ваших бизнес-правил.

1 голос
/ 04 июля 2010

Кажется, это открытый вопрос в webkit (и не скоро будет исправлен):

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

Если кто-нибудь знает об обходных путях, сообщите мне.

...