2009-04-29 2 views
5

В IE и FF я могу привязать обработчик событий к onBeforeUnload и передав строку в свойство события, пользователь увидит диалог с вопросом о том, хочет ли он продолжить «разгрузку» (либо закрытие окна или навигации).Можно ли открыть диалоговое окно подтверждения, когда пользователь закрывает окно в Safari/Chrome?

Safari и Chrome не поддерживают onBeforeUnload, а onUnload, кажется, слишком поздно. Есть ли способ воспроизвести ту же функциональность в Safari/Chrome?

ПРИМЕЧАНИЕ: Я не пытаюсь удерживать пользователя в заложниках. Я знаю, что это ворчание и непримиримость. На самом деле, мой сайт идет очень долго, чтобы позволить пользователю идти свободно и иметь все на своем месте, когда они вернутся. Тем не менее, я размещаю другие сайты в IFrames, и иногда они решают избавиться от меня и взять на себя браузер, чего я пытаюсь избежать.

Спасибо!

+0

Обратите внимание, что это обычно считается грубым заложили чужие сайты в свои собственные рамки, и раздался огромный протест, когда недавно сделал Digg. –

+0

Я знаю, и спасибо за предложение. Тем не менее, у нас есть ОЧЕНЬ другая цель, чем Digg, и (мы считаем, по крайней мере) у нас есть все основания для этого, она действительно дает некоторые реальные возможности. –

ответ

7

Это отлично работает для меня как в Chrome и Safari:

<html><body><p>Test</p> 
<script>window.onbeforeunload = function() { return "Sure?"; }</script> 
</body></html> 

При попытке закрыть окно, я получаю приглашение.

+0

Хммммммм. Это странно ... Мой код не работал в Safari. Возможно, это потому, что я использовал Event.observe() Prototype для прикрепления обработчика ... В любом случае, спасибо большое! Вы просто сделали мою жизнь намного проще! –

+0

@RichieHindle Можно ли вызвать родительское окно для обновления при закрытии дочернего элемента с помощью этого метода? или я могу позволить этому вызвать другую функцию js вместо подтверждения? – raym0nd

+0

@ raym0nd: обработчик 'onbeforeunload' имеет кучу ограничений на то, что он может сделать. Я не совсем уверен, что это такое, и они могут варьироваться между браузерами. Вы должны проверить это, но я сомневаюсь, что он будет работать везде, сейчас и в будущем. – RichieHindle

2

сам StackOverflow использует onbeforeunload, и она отлично работает для меня в Safari:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null} 
2

Я проверил его в хроме и, кажется, работает нормально, используя это:

<body onunload="alert('x');" onbeforeunload="test1();"> 
+0

В оригинальном вопросе говорится, что 'onUnload кажется слишком запоздалым'. –

Смежные вопросы