window.onbeforeunload, но для кадра? - PullRequest
5 голосов
/ 08 ноября 2010

Я пытаюсь вывести предупреждающее сообщение о выходе из веб-страницы, но оно вложено в набор фреймов.

Очевидно, window.onbeforeunload срабатывает, если я загружаю веб-страницу как корневую страницу в браузере, но не запускается при загрузке внутри набора фреймов.

Редактировать : он не работает в Chrome 7 или Safari 5, но работает в Internet Explorer 8 и FireFox 3.6. Есть ли исправление / обходной путь, чтобы я мог заставить его работать и в Chrome 7 и / или Safari 5?

Что я делаю не так?

Вот что я попробовал:

function closePageWarning()
{
    return "Are you sure you want to leave this page?"
}

window.onbeforeunload = closePageWarning

Тестовые документы:

test1.html (страница со сценарием unbeforeunload)

<html>
    <body>
        <script language="javascript">
        function closePageWarning()
        {
            return "Are you sure you want to leave this page?";
        }

        window.onbeforeunload = closePageWarning;
        </script>
        <a href="http://www.bitbucket.org">bitbucket</a>
    </body>
</html>

test2.html (frameset)

<html>
    <frameset cols="20%, 80%">
        <frame name="menu" src="test3.html" />
        <frame name="content" src="test1.html" />
    </frameset>
</html>

test3.html (меню, запуск смены фрейма с помощью скрипта)

<html>
    <body>
        <a target="content" href="http://www.bitbucket.org">bitbucket</a>
    </body>
</html>

Как проверить:

  • Загрузите test1.html в свой браузер и нажмите на ссылку, обратите внимание, что вы получите вопрос
  • Загрузите test2.html в свой браузер, нажмите любую ссылку, и вы заметите, что у вас нет вопросов

Проверено в:

  • Google Chrome 7.0.517.44 - не работает
  • Internet Explorer 8.0.7600.16385 - работает
  • Safari 5.0.2 - не работает
  • FireFox 3.6.12 - работает

1 Ответ

1 голос
/ 08 ноября 2010

В контексте фрейма, window относится к фрейму, который является своего рода окном.Таким образом, window.onbeforeunload относится к событию окна во фрейме, которое не запускается при выгрузке корневой страницы.Вы можете обратиться к корневому окну по window.top или к прямому родительскому окну фрейма по window.parent.Однако это не стандартные свойства, поэтому используйте их на свой страх и риск!

...