我正在编写一个应用程序,如果用户回击,它可能会重新发送相同的信息并弄乱数据的流和完整性.如何为有和没有javascript的用户禁用它?
编辑:我真正需要知道的是,当用户通过后退按钮到达页面时,是否有任何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>
Run Code Online (Sandbox Code Playgroud)
注意:我已经使用IE8,FF3.5,Safari 4,Opera 9和Chrome 2.0在WinXP上进行了测试.只有Safari和FF在您使用返回时禁用该按钮.
惩罚时间,我认为发布这个问题是不合适的,因为它已经被问了很多次,但这次我发布准备好后果,因为我别无选择.我会回答任何评论,我也可以在下面给出的任何链接上展示我的尝试(你会感兴趣).
我有一个登录页面和一个page1.我需要在登录页面上处理或不工作浏览器后退按钮.这可能是我为FF和Chrome做的,但无法为IE做.我的FF工作代码如下.
window.onload = function ()
{
if (typeof history.pushState === "function")
{
history.pushState("jibberish", null, null);
window.onpopstate = function ()
{
history.pushState('newjibberish', null, null);
// alert('back button pressed');
// This works in Chrome and FireFox but not in IE
};
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在我的登录页面中有一些代码(在所有浏览器上工作),以便:所需的输出:在登录页面上按下后退按钮不会将用户带回到page1(就像facebook登录页面一样).我不想禁用后退按钮,只是为了处理它在登录页面上的点击.
从评论编辑.请回答该怎么做,我读过"不要这样做"而不是该做什么.以下代码适用于页面加载,除非通过后退按钮加载此页面(第1页),然后单击登录页面
if (Session["role"] == null)
Response.Redirect("login.aspx");
Run Code Online (Sandbox Code Playgroud)
我试图在同一个问题上跟几个问题,但一直无法得到我需要的东西.我宁愿不使用window.location.hash,但如果没有其他解决方案就准备好了
在线考试一旦候选人点击了开始按钮,我就不想让他回去(到以前的页面),如果他通过使用浏览器属性做任何活动,他应该在同一页面.一旦他点击提交按钮,他就是走出那个页面.
在这里,如果我清除缓存并按下浏览器后退按钮,页面显示为" 文档已过期所请求的文档在Firefox的缓存中不可用. "因此我不想清除cach insted我需要竞争禁用后退按钮,即不应该发生任何事情单击后退按钮.
如果有人知道让我知道如何实现这个概念......
我必须禁用浏览器的后退和前进按钮(IE和Firefox两者).我试过了:
//disable back button
window.onbeforeunload= function() { }
window.history.forward(1);
Run Code Online (Sandbox Code Playgroud)
但这只适用于IE.
有没有万无一失的解决方案?