2013-07-31 4 views
0

enter image description here Мне нужно вызвать функцию JS, когда пользователь закрывает вкладку браузера. проблема в том, что я хочу, чтобы это произошло, только когда пользователь закрыл браузер. нет необходимости в обновлении страницы, навигации по ссылкам, нажатии кнопки отправки формы и возврата. Я пробовал код jquery ниже.Вызов функций JS на вкладке браузера close

$(window).bind(
"beforeunload", 
function() { 
    alert("don't close me"); 
    return false; 
} 
) 
$('form').submit(function() { 
    jQuery(window).unbind("beforeunload"); 
}); 

его не работает. может кто-нибудь ответить за это. есть ли какие-либо другие js-инструменты, чем jquery для этого ?.

И если я вызываю свою функцию «beforeunload», появляется следующее сообщение. я не хочу показывать это сообщение, и моя функция должна работать. Я попытался дать e.preventDefault. но он не вызывает мою функцию также, когда я использовал это. может кто-нибудь что-то предложить. Спасибо.

+0

Для чего вам это нужно? В любом случае это невозможно сделать надежно. – Bergi

+3

Oy ... пожалуйста, подумайте, насколько это ужасно для пользователя ... – Lix

+0

Ненавижу тех, кто добавляет раздражающие предупреждения перед загрузкой. Серьезно, его можно очень редко увидеть на любых легитимных сайтах. – MightyPork

ответ

3

Я согласен с комментариями, что это плохая практика, но я не могу устоять перед вызовом, чтобы попытаться ответить на вопрос.

Единственный способ, которым я могу это сделать, - использовать onbeforeunload, который вы уже делаете. Но вам нужно отключить это предупреждение, когда кто-то перемещается в сторону от страницы другими способами.

var show_close_alert = true; 

$("a").bind("mouseup", function() { 
    show_close_alert = false; 
}); 

$("form").bind("submit", function() { 
    show_close_alert = false; 
}); 

$(window).bind("beforeunload", function() { 
    if (show_close_alert) { 
     return "Killing me won't bring her back..."; 
    } 
}); 

Это не несложный, как есть способы, чтобы закрыть браузер, не видя предупреждение (например, нажав на ссылку, сразу попав Стоп, а затем закрыть браузер), но это может быть так близко, как вы можете получить.

Вот fiddle.

Но, пожалуйста ... не делайте этого.

+0

спасибо .. избегает предупреждения для навигации и формы submit. но это происходит для обновления страницы. – isc

+0

Вы можете добавить обработчики событий для всех «обновленных» нажатий клавиш: 'F5',' Ctrl + F5', 'Ctrl + r',' Cmd + r', 'Ctrl + shift + r' и' Cmd + shift + r', которые все устанавливают 'show_close_alert' в' false'. Но их невозможно поймать, потому что пользователи могли бы переназначить ключи или просто щелкнуть значок «Обновить». Нет никакого способа сделать то, что вы хотите, со 100% успеха. Урок, чтобы узнать из этого факта, заключается в том, что вы не должны делать этого. :) – mwcz

+1

:: Спасибо .. я понял это..тот что делать. кто-то очень заинтересован в раздражении пользователя. :) – isc

0

JSFiddle использует следующее для предупреждения пользователя они пытаются закрыть их модифицированную скрипку без сохранения:

window.onbeforeunload = function(){ 
    if (window.editorsModified){ 
    return "You've modified your fiddle, reloading the page will reset all changes." 
    } 
}; 

Это надежно работает (http://jsfiddle.net/MaxPRafferty/b6uEF/show/, Последний Chrome, FF, IE10), но всегда подскажет пользователю , Вы не можете заставить страницу открываться, возвращая false;

0

OnUnload (или onbeforeunload) не может перенаправить пользователя на другую страницу. Это по соображениям безопасности.

Если вы хотите, чтобы показать подсказку, прежде чем пользователь покидает страницу, используйте onbeforeunload:

window.onbeforeunload = function(){ 
    return 'Are you sure you want to leave?'; 
}; 

Или с JQuery:

$(window).bind('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

Это просто спросить пользователя, если они хотят, чтобы оставить страницы или нет, вы не можете перенаправить их, если они захотят остаться на странице. Если они захотят уйти, браузер отправится туда, куда они сказали, чтобы идти.

Вы можете использовать OnUnload, чтобы делать вещи, прежде чем страница выгружается, но вы не можете перенаправить оттуда (Chrome 14+ блокирует сигналы внутри OnUnload):

window.onunload = function() { 
    alert('Bye.'); 
} 

Или с JQuery:

$(window).unload(function(){ 
    alert('Bye.'); 
}); 
Смежные вопросы