编辑 :我真正需要知道的是,如果有,当用户通过后退按钮到达网页,将触发可靠任何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请禁用按钮,当您使用回得到他们。
我不认为你可以测试后退按钮明确,但我相信你可以检查与JavaScript在浏览器的历史地位。
是不是你想要的,所以他们不使用后退按钮双提交的行为?
无论如何,你可以设置以下几个页面上的cookie,并检测负载与网页上的表单。
是。 在javascript中您可以使用visited.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;
}
你会在onload标签FYI调用它。
通过@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';
}
?>