Как избежать предупреждения о несохраненной форме в Safari - PullRequest
1 голос
/ 24 декабря 2009

Safari имеет функцию, которая запрашивает у вас, если вы действительно хотите закрыть / обновить страницу, на которой есть несколько форм, которые вы набрали. Это полезно в большинстве случаев, но в этом случае это меня беспокоит.

Я перехватываю событие submit в некоторых формах и отправляю их на сервер через XMLHttpRequest. Однако Safari этого не знает, поэтому, когда я хочу закрыть вкладку, он отображает это чертово предупреждение о том, что значения формы изменились.

Я знаю, как отключить его в OS X, и я не хочу этого. Я хочу отключить его на этой конкретной веб-странице, которую я создаю, и для всех пользователей Safari. Конечно, должен быть какой-то способ JavaScript - мне все равно, является ли он проприетарным для webkit.

Обновление: Я пробовал это, но безрезультатно. Safari сначала предупреждает о несохраненных данных, , а затем вызывает событие beforeunload.

if (Prototype.Browser.WebKit)
  window.addEventListener('beforeunload', function(e) {
    forms.invoke('reset')
  })

Ответы [ 4 ]

1 голос
/ 24 декабря 2009

Это поведение приложения, поэтому на самом деле не должно быть никакого способа его изменения в JavaScript. Каждая особенность WebKit хорошо документирована, и я никогда не видел ничего подобного. Просто очистите поля формы, если вы действительно беспокоитесь об этом.

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002079-SW1

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Introduction.html#//apple_ref/doc/uid/30001261

1 голос
/ 24 декабря 2009

Я не знаю Safari, но если вы просто отправляете значения и не нуждаетесь в них впоследствии, почему бы просто не сбросить форму? Я не ожидал никаких изменений = никаких предупреждений.

Если вы не хотите сразу сбросить настройки, вы можете даже попытаться подключить команду сброса к событию unbeforeunload, чтобы сделать это при закрытии страницы. Работает ли это, зависит от того, когда Safari проверяет измененную форму, хотя - до или после вызова unload.

0 голосов
/ 26 декабря 2009

Попробуйте удалить атрибуты action и method из тега формы с помощью Javascript после того, как вы отправите связывание. Таким образом, Safari больше не должен видеть входные данные как часть реальной формы.

0 голосов
/ 26 декабря 2009

Единственный способ, который я вижу, это иметь форму, состоящую только из скрытых входных данных, и группу элементов ввода, которые не связаны с формой. При отправке вы выбираете значения из элементов, делаете запрос и сбрасываете внутреннюю форму. Вы могли бы даже сделать перемещение элементов ввода из формы через DOM, чтобы это даже изящно ухудшалось.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...