Я в настоящее время создаю регистрационную страницу, где, если пользователь уезжает, я хочу открыться поле CSS, спрашивая его, если он уверен или нет. Я могу выполнить это использование подвига, подтверждают поля, но клиент говорит, что они слишком ужасны. Я попытался использовать, разгружаются и beforeunload, но оба не могут мешать странице быть перенаправленными. Используя тех, которые к событиям, я возвращаю false, поэтому возможно, существует способ отменить кроме возвращения false?
Другое решение, которое я имел, перенаправляло их к другой странице, которая имеет мое всплывающее окно, но проблема с этим состоит в том, что, если они действительно хотят оставить страницу, и это не была ошибка, они теряют страницу, в которую они первоначально пытались перейти. Если бы я был пользователем, который раздражал бы меня.
Последним решением было реальное всплывающее окно. Единственная вещь, которую я не люблю приблизительно, который является, что основная веялка будет иметь их целевую страницу, в то время как поп будет иметь мою страницу. По-моему, это выглядит непересекающимся. Вдобавок ко всему, я был бы взволнован по поводу блокировщиков всплывающих окон.
Только добавить к комментариям everyones. Я понимаю, что это является раздражающим, чтобы препятствовать тому, чтобы пользователи вышли из страницы, и по-моему это не должно быть сделано. Прямо сейчас я использую подтвердить поле в этой точке. То, что происходит, - то, что это на самом деле "не препятствует тому", чтобы пользователь уехал, что клиент на самом деле хочет сделать, делают предложение, если у пользователя есть сомнения относительно регистрации. Если пользователь является промежуточным посредством процесса registraiton и уезжает по некоторым причинам, клиент хочет предложить пользователю свободный купон семинару (этот клиент продает семинары), надо надеяться, убедить пользователя зарегистрироваться. У клиента создается впечатление, что, так как пользователь уже находится на форме, он думает о регистрации и поэтому возможно, семинаре того, для чего он регистрируется, было бы заключительное нажатие, чтобы заставить пользователя регистрироваться. Идеально я не должен препятствовать тому, чтобы пользователь уехал, что было бы так же хорошо, и по-моему лучше, если я могу приостановить разгрузить процесс. Возможно, команда сна? Я не должен действительно сохранять пользователя на странице, потому что так или иначе они будут уезжать для движения в другую страницу.
Кроме того, как люди заявили, это - terriable заголовок, поэтому если бы кто-то знает лучший, я был бы очень признателен, если они могли бы изменить заголовок на что-то не так спаммер, приглашающий.
Не делай этого.
Но если хотите, попробуйте это. Записывайте положения мыши и обнаруживайте быстрый толчок вверх - пользователь тянется к БОЛЬШОМУ X или верхнему левому или верхнему правому углу. Возможно, теперь у вас есть шанс получить ненавязчивую рамку на экране.
Я видел это орудие в сети, и это зло.
window.onbeforeunload = function() { return "Message"; };
Используйте подобный JavaScript, чтобы отобразить сообщение с подтверждением выхода .
Не все браузеры поддерживают модальное всплывающее окно, без которого ваша страница все равно перейдет на другую.
Это действительно ужасное требование. Такое требование, которое разумно в настольном приложении, но совершенно неразумно на веб-сайте. Представьте себе, что вы не можете покинуть веб-сайт.
Ответ: либо используйте ужасное поле подтверждения и забейте на него. Или не просите пользователя вводить слишком много данных на странице. Используйте пошаговый ввод данных в стиле мастера, и потери из-за случайной навигации будут сведены к минимуму.
Вот лишь пара подходов, которые мне пришли в голову, но они не лишены недостатков:
localStorage
или на сервере с помощью cookie или чего-то подобного, чтобы его можно было воссоздать позже. Каждые пару часов отправляйте им электронное письмо с прямой ссылкой на ранее сохраненную форму, и, возможно, со специальными предложениями на этот раз. Еще одно преимущество этой замечательной техники - даже если пользователь закроет одно из окон, а позже столкнется с идентичным клонированным окном со всеми заполненными полями, он может запутаться и подумать, что никогда не закрывал страницу. И знаете что, на этот раз они могут просто продолжить заполнение регистрационной формы. Но с этим нужно быть осторожным, так как если будет больше 2-3 клонов, то станет ясно, что происходит.
document.location.href = 'some url'
внутри вашего onbeforeunload
обратного вызова для перехода на другую страницу до того, как она будет выгружена.
1 Только для Firefox.
Примечание: здесь нет решения "серебряной пули", если только вы не напишете свой собственный браузер с собственными политиками безопасности, но это все оптимизации, которые вы можете сделать, чтобы сделать совершенно невозможным уход пользователей.
Вы можете изменить значение URL-адреса, используя document.location.href = "www.website.com"
Я могу совершить этот подвиг, используя окна подтверждения, но клиент говорит, что они слишком уродливые.
Если проблема заключается в уродливости стандартных всплывающих окон JS, попробуйте что-нибудь вроде этого: http://www.sohtanaka.com/web-design/inline-modal-window-w-css-and- jquery /
Кроме того, я поддерживаю то, что говорит большинство людей: делайте это с особой осторожностью, если не хотите терять пользователей.
Как только я увидел слова «предотвратить пользователя», я начал плакать от боли. Никогда не мешайте пользователю, только помогайте ему.
Если они видят вашу страницу регистрации и сбегают, это их выбор . Вызовите окно подтверждения javascript, если они уже заполнили некоторые данные (потому что они могут случайно уйти), но оставьте это как есть. Если они не коснулись формы, оставьте их в покое - они не хотят, чтобы заполнял вашу форму.
Посмотрите на другие методы привлечения пользователей. Если ваша форма огромна и пугает, разбейте ее на простые управляемые части или, что еще лучше, упростите ее настолько, чтобы пользователь давал вам данные только тогда, когда они вам нужны. Например, вам может не понадобиться их адрес, пока вы не захотите что-то им опубликовать.
Разбив его на несколько частей, вы можете зацепить их простой формой, и как только они вложат это время, они с большей вероятностью продолжат процесс.
Но не оскорбляйте пользователей. Если они не хотят регистрироваться, приставание к ним всплывающими окнами и диалогами jaavscript просто изгонит их с сайта.
Имея это в виду, предполагая, что вы просто пытаетесь помешать людям заполнять формы наполовину, есть несколько вариантов, чтобы искренне помочь людям:
Определите, изменилась ли форма, и задайте им простой confirm ()
сообщение.
Это все, что вы можете сделать. Всплывающее окно CSS просто не будет работать, потому что вы не можете контролировать * расположение окна в событии выгрузки.
* Вы можете поместить прослушиватель событий на все ссылки вашей страницы, чтобы запустить что-то для проверки формы, но это помогает только в том случае, если пользователь нажимает на одну из этих ссылок. Это не поможет, если, например, пользователь щелкнет назад или закроет окно. Вы могли использовать как CSS, так и javascript, но в итоге вы получите небольшой беспорядок.
Сохраняйте состояние формы за кадром.
Расширение №1. Вместо того, чтобы ссориться с пользователем, позвольте им идти, куда они хотят, но сохраните содержимое формы либо в сеансе, либо в файле cookie (если он подходит) и поместите что-нибудь на страницу (например, оранжевые панели подсказок SO в верхней части страницы ), который напоминает им, что они начали заполнять форму, и дает им обратную ссылку на форму.
Когда они нажимают на эту ссылку, вы загружаете данные из файла cookie (или сеанса) обратно в форму и позволяете им продолжать. Это дает очевидное преимущество, позволяя им делать на вашем сайте то, что им нравится, и сохраняет данные в безопасности .. иш.
Если они не вернутся и срок их cookie / сеанса истечет, это их вина. Можно только лошадь к воде привести. Заставлять его пить - не твоя работа.
Если вы хотите перехватить ссылки, вы можете переписать ссылки на странице так, чтобы они указывали на "вы действительно хотите уйти?" javascript, передавая целевой URL в качестве аргумента.
Если вы хотите, чтобы пользователи не использовали кнопку «Назад» или не добавляли другой URL-адрес в адресную строку, остановитесь. Остановитесь сейчас.(1) Браузеры были созданы для предотвращения именно такого неприятного поведения, и (2) Даже если они разрешили это, см. Последние два слова в (1). Это чертовски грубо . Ваш сайт не такой уж особенный, каким бы крутым вы его ни считали.