Подавить Safaris "Вы ввели текст..." предупреждение?
![Вы действительно хотите закрыть эту вкладку? Вы ввели текст в]()
Safari помогает (?) запрашивать перед закрытием вкладки или окна, когда текст введен во вход.
В некоторых случаях, когда веб-разработчику это не желательно - например, когда вход представляет собой прямой поиск, где пользователь, вероятно, уже получил результаты, которые искали, когда окно закрыто, хотя все еще остается текст в поле.
Как я могу позволить Safari знать, что текст в конкретном входе не нуждается в его защите?
Ответы
Ответ 1
Я думаю, что у меня есть решение этой проблемы, хотя это, безусловно, взлом (т.е. если Safari изменит способ реализации этой функции, он может перестать работать). Показанный здесь с помощью jQuery:
$('.unimportant').live('blur', function(){
var olddisplay = this.style.display;
this.style.display = 'none';
this.clientLeft; // layout
this.style.display = olddisplay;
});
Демо (попробуйте ввести "неважное" поле, щелкните в другом месте на странице, затем закройте окно).
Короче:
- Скрыть ввод
- Расположение триггеров
- Показать ввод
Вы также можете изменить значение ввода, расположение триггера и изменить его.
Единственное ограничение здесь заключается в том, что очистка ввода должна выполняться явно. В этом случае он будет загрязнен до blur
. Это хорошо работает в моей ситуации и, вероятно, во многих других, так как вход будет защищен от случайного окна, пока не будет обработано что-либо на странице (например, нажата ссылка). Вы можете выбрать запуск на keyup
, если вы хотите жить с мерцанием точки вставки при каждом нажатии клавиши.
Я открыт для более чистых решений.
Ответ 2
Кажется, что вы можете отключить это предупреждение для всей страницы, имея обработчик onbeforeunload
на <body>
(даже пустой будет делать). Например, следующее предупреждение не будет выдано:
<body onbeforeunload="">
<form method="get"><input></form>
</body>
Я не уверен, что это предполагаемое поведение или ошибка.
Ответ 3
Я нашел то, что считаю хорошим решением этой проблемы. Когда я использую AJAX для отправки формы, я хочу, чтобы предупреждение было подавлено. Это достигается с помощью onbeforeunload.
window.onbeforeunload=function(e){}
Но после того, как я отправлю, я могу внести дополнительные изменения, и поэтому я хочу, чтобы предупреждение снова показывалось. Для этого я добавил обработчик клавиатуры в элемент формы.
$('txtarea').onkeyup=dirty;
Какие грязные действия проверяются, это поле ввода изменилось, если оно было тогда, когда я установил onbeforeunload в null.
function dirty(e){
if (e.srcElement.value != e.srcElement.defaultValue){
window.onbeforeunload=null;
}
}
Ответ 4
Я только нашел другое решение, чтобы Safari не отображал "Вы действительно хотите перезагрузить эту страницу?" , когда текстовые поля изменили их содержимое.
Оказывается, что установка значения через Javascript очищает состояние Safari changed
:
$(document).on('blur', 'textarea', function() {
var value = $(this).val();
$(this).val('').val(value);
});
Сброс значения в первую очередь важен, напрямую установка его на содержимое, которое оно уже существует, не работает.
EDIT По-видимому, установка window.onbeforeunload
на пустую функцию все же работает, однако $(window).on('beforeunload', function() {})
не работает.