Google Chrome onbeforeunload неправильное поведение с iframe - PullRequest
12 голосов
/ 21 октября 2009

Допустим, у меня есть две страницы. Один из них содержит другой внутри iframe. Если вы подписываетесь на событие onbeforeunload на родительской странице, то это событие не срабатывает, если вы закрываете вкладку, когда iframe находится в фокусе. Я предполагаю, что это ошибка, как написано здесь: Проблемы с Google Chrome

Но я упомянул, что, например, документы Google справляются с этой ситуацией. Кто-нибудь может дать мне решение? Важное замечание: у меня нет реального доступа к содержимому iframe, так как это сторонний html-редактор (WYSIWYG).

Ответы [ 3 ]

4 голосов
/ 26 января 2012

Я знаю, что это старый вопрос, но только чтобы помочь людям, которые приходят сюда через Поиск:

Ошибка исправлена ​​здесь .

Начиная с Chrome 10, проблема должна быть исправлена.

Существует ошибка, связанная с , но здесь .

Итак, короче говоря, если вы все еще не можете использовать «onbeforeunload» для фреймов, это может быть связано с изменением содержимого с помощью JavaScript, например document.open document.write document.close и т. Д.

0 голосов
/ 10 февраля 2012

Вы можете также попытаться изменить URL-адрес iframe на "about: blank", например ::

$("#myFrameId")[0].src = "about:blank";

Это заставляет chrome "чисто" закрыть окно, содержащееся в iframe.

Просто упомяну: если вы хотите закрыть только свой iframe, но не родительское окно, вам нужно дать chrome достаточно времени для запуска обработчика, который вы подключили к 'onbeforeunload'.

0 голосов
/ 26 января 2012

приведенный ниже код будет работать во всех браузерах

if (typeof window.addEventListener != 'undefined') {
    window.addEventListener('beforeunload', test, false);
}
else if (typeof document.addEventListener != 'undefined') {
    document.addEventListener('beforeunload', test, false);
}
else if (typeof window.attachEvent != 'undefined') {
    window.attachEvent('onbeforeunload', test);
}

else {
    if (typeof window.onbeforeunload == 'function') {
        window.onbeforeunload = function() {
            test();
        };
    }
    else {
        window.onbeforeunload = test;
    }
}

function test(){ alert('working');}

попробуйте это один раз ...

...