Как программно определить, как браузер обрабатывает window.close()?
Различные веб-браузеры обрабатывают функцию window.close() по-разному. IE запрашивает подтверждение пользователя, в то время как Firefox и Safari просто не соблюдают его, если только окно не было открыто с помощью Javascript и не отобразило сообщение, говорящее так же, как на консоли.
Стороннее веб-приложение, используемое внутри нашей организации, которое я поддерживаю, отображает кнопку "закрыть" в конце серии страниц, подобранных мастером. Это хорошо работает для IE, что и используется большинством наших пользователей. Однако это, очевидно, не выполняется в FF. Я бы предпочел оставить кнопку и использовать Javascript для изящного ухудшения пользовательского интерфейса, не отображая эту кнопку в любом браузере, который не будет выполнять window.close().
Как правило, я пытаюсь проверить возможности браузера, а не полагаться на жестко закодированную политику, основанную на обнаружении браузера, когда это возможно. Есть ли способ программно проверить поддержку window.close(), чтобы я мог определить, должна ли кнопка отображаться в первую очередь?
Ответы
Ответ 1
Попробуйте следующее:
Демо: http://jsfiddle.net/ThinkingStiff/mnv87/
Script:
function hasClose() {
var close = window.open( '', '', 'height=100,width=100,left=3500', false );
close.close();
return close.closed;
};
if( hasClose() ) {
//show button
} else {
//hide button
};
Примечание hasClose()
также вернет false
, если всплывающие окна заблокированы.
Ответ 2
Почему бы не проверить совместимость, а затем добавить в случае совместимости? Использование jQuery:
<script type="text/javascript" src="latest_jquery_file.js"></script>
<script type="text/javascript">
$(document).on("ready", (function(e)
{
$("body").append('<p><a href="#" id="windowcloser">Close The Window!!</a></p>');
$('#windowcloser').click(function(){
window.close();
});
})
);
</script>
Так как jQuery совместим с кросс-браузером, он должен
Ответ 3
Очень просто. Ваш script должен попробовать (или try
) до window.close
, и если он все еще жив после этой попытки - покажите это сообщение и, необязательно, удалите/замените содержимое страницы или используйте location.reload
, чтобы не предоставлять вашим пользователям любая причина оставаться на странице больше.
p.s: имейте в виду, что закрытие окон из JavaScript очень невежливо. Поэтому у вас есть несколько веских причин для этого;)