Подтвердить что ты не робот

Google chrome onbeforeunload неправильное поведение с iframe

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

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

4b9b3361

Ответ 1

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

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

Так как chrome 10, проблема должна быть исправлена.

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

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

Ответ 2

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

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');}

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

Ответ 3

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

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

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

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