Могу ли я определить, когда пользователь попадает на страницу с помощью кнопки «Назад»? - PullRequest
9 голосов
/ 16 июля 2009

Редактировать : Что мне действительно нужно знать, так это то, есть ли какое-либо событие javascript, которое надежно сработает, когда пользователь попадет на страницу с помощью кнопки назад. Я пробовал событие onload для элемента body, но оно не срабатывает в Firefox или Safari.


Я работаю со старым кодом, который пытается предотвратить двойную отправку данных формы, отключая все кнопки отправки формы, как только пользователь нажимает одну из них (прослушивая событие onSubmit формы). Этот код применяется ко всем формам в приложении, независимо от того, будет ли двойная отправка проблемой.

Проблема в том, что если пользователь нажимает кнопку «Назад» в Firefox или Safari, все кнопки отправки по-прежнему отключаются, когда он попадает на страницу. В Firefox они даже отключены после обновления (это будет делать только обновление Ctrl + F5)!

Я пытался прослушать событие body onLoad, но FF и Safari не запускают его, когда вы попадаете на страницу с помощью кнопки назад. (Интересно, что он запускается при мягком обновлении FF, даже если кнопка остается отключенной.)


Вот очень простой HTML-документ, который покажет, что я имею в виду:

<html><body>
<form name="theForm" id="theForm" action="test2.html"
      onSubmit="document.theForm.theButton.disabled = true;">
  <input id="theButton" type="submit" name="theButton" value="Click me!" />
</form>
</body></html>

Примечание. Я тестировал WinXP с IE8, FF3.5, Safari 4, Opera 9 и Chrome 2.0. Только Safari и FF оставляют кнопку отключенной, когда вы используете назад, чтобы добраться до них.

Ответы [ 4 ]

2 голосов
/ 16 июля 2009

Разве это не то поведение, которое вам нужно, чтобы они не отправляли дважды с помощью кнопки "Назад"?

В любом случае, вы можете установить cookie на следующей странице и обнаружить его при загрузке на странице с помощью формы.

2 голосов
/ 16 июля 2009

Да. В javascript вы можете использовать visit.value

function checkrefresh()
 var visited = getCookie("visited");  
{
        if((form.visited.value == '' || form.visited.value == null) && (visited != '1') ) 
        {
            document.form.visited.value = "1";
                    document.cookie = "visited=1";
                    //here you set it to something so that next time they go to the page it will no longer be nothing and you can 'disable the button' see below.

        }
        else
        {
            document.form.submitbutton.disabled=true;
        }
    } 

function getCookie(name)
{
var re = new RegExp(name + "=([^;]+)");
var value = re.exec(document.cookie);
return (value != null) ? unescape(value[1]) : null;
}

Вы бы назвали это в теге загрузки для FYI.

1 голос
/ 16 июля 2009

Я не думаю, что вы можете специально проверить кнопку «Назад», но я считаю, что вы можете проверить позицию истории браузера с помощью Javascript.

0 голосов
/ 20 июня 2012

Ответ @tkotitan был, вероятно, правильным, когда он его написал. Его ответ привел меня к моему решению. Он не защищен от ошибок, но в некоторых ситуациях может быть «достаточно хорош».

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

<?php
if($_SERVER['QUERY_STRING']=='')
{
    echo '<a href="go_back_test.php?page=1">Go forward</a>';
}
elseif($_GET['page']!=2)
{
    echo 'You cannot stay here.';
    echo '
    <script type="text/javascript">
    function test()
    {
        if (document.getElementById("detectback").value=="goneback")
        {
            document.getElementById("detectback").value=history.length;
        }
        if (document.getElementById("detectback").value==history.length)
        {
            document.getElementById("detectback").value="goneforward";
            window.location = "go_back_test.php?page=2"
        }
        else
        {
            document.getElementById("detectback").value="goneback";
            window.history.back();
        }
    }
    function updateform()
    {
        if(document.getElementById("detectback").value=="")
        {
            document.getElementById("detectback").value=history.length;
        }
    }
    </script>
    <img src="spacer.gif" onload="updateform(); test();"><br>
    <form>
        <input id="detectback" type="text" value="" style="display: none;">
    </form>
    ';
}
else
{
    echo 'Welcome to page 2';
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...