Предотвратите обновление любой формы страницы с помощью jQuery/Javascript

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

  • В любое время пользователь нажимает F5 или кнопку обновления вверху. Он должен предупредить, что

    Вы не можете обновить страницу.

  • Также, если пользователь открывает новую вкладку и пытается получить доступ к такому же URL-адресу в предыдущей вкладке, он должен получить предупреждение

    Вы не можете открыть одну и ту же страницу на 2 вкладках

В любом случае я могу сделать это с помощью JavaScript или jQuery? Точка 1 действительно важна.

Ответ 1

# 1 можно реализовать через window.onbeforeunload.

Например:

<script type="text/javascript">
    window.onbeforeunload = function() {
        return "Dude, are you sure you want to leave? Think of the kittens!";
    }
</script>

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

# 2 более или менее невозможно. Даже если вы отслеживаете сеансы и пользовательские логины, вы все равно не сможете гарантировать, что вы правильно определили вторую вкладку. Например, возможно, у меня открыто одно окно, а затем закройте его. Теперь я открываю новое окно. Вероятно, вы обнаружите это как вторую вкладку, хотя я уже закрыл первую. Теперь ваш пользователь не может получить доступ к первому окну, потому что он закрыл его, и они не могут получить доступ ко второму окну, потому что вы его отрицаете.

На самом деле, моя банковская онлайн-система очень тяжело делает № 2, и ситуация, описанная выше, происходит все время. Обычно мне приходится ждать окончания сеанса на стороне сервера, прежде чем я снова смогу использовать банковскую систему.

Ответ 2

Вы не можете запретить пользователям обновляться, и вы не должны пытаться. Вы должны вернуться к тому, почему вам нужно это решение, какая здесь проблема с корнем? Начните там и найдите другой способ решения проблемы. Возможно, вы подробно остановились на том, почему думаете, что вам нужно это сделать, это поможет найти такое решение.

Нарушение основных функций браузера никогда не является хорошей идеей, более 99.999999999% Интернета работает и обновляется с помощью F5, это ожидание пользователя, которое вы не должны нарушать.

Ответ 3

Хотя это не очень хорошая идея отключить ключ F5, вы можете сделать это в JQuery, как показано ниже.

<script type="text/javascript">
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };

$(document).ready(function(){
     $(document).on("keydown", disableF5);
});
</script>

Надеюсь, это поможет!

Ответ 4

В прошлые дни CGI у нас было много форм, которые могли бы инициировать различные бэкэнд-действия. Например, текстовые уведомления для групп, задания на печать, фермирование данных и т.д.

Если пользователь был на странице, которая говорила "Пожалуйста, подождите... Выполнение некоторой ОГРОМНОЙ работы, которая может занять некоторое время". Они, скорее всего, попали в REFRESH, и это было бы БЕСПЛАТНО!

Почему? Потому что это приведет к более медленным работам и, в конечном итоге, увяжет все это.

Решение? Позвольте им сделать свою форму. Когда они отправляют свою форму... Запустите свою работу, а затем направьте ее на другую страницу, которая заставит их ждать.

Если страница в середине фактически содержала данные формы, необходимые для запуска задания. Страница WAIT, однако, содержит историю разрушения javascript. Таким образом, они могут RELOAD, что ждать страницу все, что они хотят, и никогда не будет запускать исходное задание в фоновом режиме, поскольку эта страница WAIT содержит только данные формы, необходимые для самой WAIT.

Надеюсь, что это имеет смысл.

Функция уничтожения истории также не позволяла им нажимать BACK, а затем обновляться.

Он был очень плавным и отлично работал в течение многих MANY лет, пока некоммерческая деятельность не была рана.

Пример: FORM ENTRY - собирать всю свою информацию и при ее отправке, это запускает вашу заднюю работу.

ОТВЕТ ОТ ВХОДА В ФОРМУ - возвращает HTML, который выполняет перенаправление на вашу статическую страницу ожидания и/или POST/GET в другую форму (страница WAIT).

WAIT PAGE - содержит только данные FORM, относящиеся к странице ожидания, а также javascript для уничтожения самой последней истории. Подобно (-1 ИЛИ -2), чтобы уничтожать только самые последние страницы, но все же позволяет им вернуться к исходной странице входа FORM.

Как только они появятся на вашей странице WAIT, они могут щелкнуть REFRESH столько, сколько захотят, и это никогда не вызовет исходную работу FORM на бэкэнд. Вместо этого ваша страница WAIT должна включать в себя своевременное обновление META, чтобы он всегда мог проверить статус своей работы. Когда их работа будет завершена, они будут перенаправлены от страницы ожидания до того, что вы пожелаете.

Если они делают вручную REFRESH... Они просто добавляют еще одну проверку статуса своей работы там.

Надеюсь, что это поможет. Удачи.

Ответ 6

Число (2) возможно теперь, используя socket.io с индивидуальным пульсом для каждой сессии, в которой пользователь участвует. Если пользователь пытается открыть другое окно, у вас есть проверка обработчика javascript с сервером, если он в порядке, а затем отвечать сообщениями об ошибках.

Однако лучшим решением является синхронизация двух сеансов, если это возможно, как в документах google.