1

可能重复:
如何禁用 IE 和 Firefox 中的后退按钮?

我正在开发一个单页网站(DAM)。要进入此站点,用户必须经过身份验证。登录后,如果用户单击后退按钮,他将看到登录页面。登录页面不在我的控制范围内,意味着它是由 oracle 内容管理系统提供的,所以我无法在其中添加任何代码。

我应该在我的页面中添加什么代码,以便如果按下后退按钮,他将被导航到同一页面。

我曾尝试使用 onbeforeunload 并且有效,但我不想要任何确认消息,只想留在该页面上。

4

6 回答 6

4

这是不可能的,因为它被明确设计为以这种方式工作 - 如果用户点击“返回”,浏览器必须返回到前一页。有一些不可靠的技术,但最终它们都因某种原因而失败。

但是...我想在您的情况下,您可以进行双重重定向并在登录后立即处理登录页面中的“后退”按钮?

于 2012-07-25T12:21:27.470 回答
2

具有良好可用性的单页应用程序如何工作

如果您想增加页面的用户体验和可用性因素,您应该使用页面哈希/片段。我不会提供与其他人相同(或相似)的代码,而是升级体验。

那么那个UX怎么样

每次更改其工作上下文时,您的单页 Web 应用程序都应该更改哈希值。这可能是由用户在 UI 中执行的用户界面或业务流程定义的,或者甚至可能是此类流程的各个步骤(当预期用户将/应该返回到先前的流程状态时)。

这样,您的应用程序的功能将类似于由多个页面组成的普通 Web 应用程序,并在相同的业务流程及其步骤的基础上创建新的历史条目(在这种情况下,步骤通常是整页回发)。

因此,当您可以更改页面片段时,业务流程和将您的应用程序视为普通的多页应用程序将为您提供许多有用的点。由于您可以控制这一点,因此您可以提供比多页 Web 应用程序更好的粒度(通常更少)。

多页应用历史点数过多的简单例子

表单帖子通常总是有问题的,所以在回发响应之后有一个历史点总是不好的,因为用户点击 F5 会一遍又一遍地重新发送相同的表单(好的浏览器确实会询问您是否重新发送帖子数据,但这仍然是糟糕的体验)。

页面碎片是要走的路,只需进一步使用它,而不仅仅是阻止返回登录页面。

完全防止登录页面进入历史堆栈将通过将其显示在您的页面上的iframe. 您当然需要检测未经身份验证的用户并添加iframe自己并在其中加载登录名。用户验证后,您应该重新加载您自己的页面。但是您应该知道,检测登录成功不是一个简单的过程。

于 2012-07-25T14:25:55.497 回答
0
window.location.replace(URL);

将当前文档替换为提供的 URL 中的文档。与 assign() 方法的不同之处在于,在使用 replace() 之后,当前页面将不会保存在会话历史记录中,这意味着用户将无法使用后退按钮导航到该页面。

于 2012-07-25T12:25:31.983 回答
-1
function win_onkeydown_handler()
{
switch (event.keyCode){

case 116 : // 'F5'
event.returnValue = false;
event.keyCode = 0;
alert("Refresh Not Allowed");
break;
case 08 : // 'BS'
if(event.srcElement.tagName=="INPUT" || event.srcElement.tagName=="DIV")
{
}
else{
event.returnValue = false;
event.keyCode = 0;
//alert("Backspace Not Allowed");
}
break;
case 17 : // ctrl key   
 event.returnValue = false;
 event.keyCode = 0;
 alert('Control Key restricted');
 }
 }

即使我在我的项目中得到了这个,但我曾经使用上面的脚本在那个页面上阻止它......如果你需要阻止后退空间,你可以单独使用那个代码

于 2012-07-25T13:41:20.790 回答
-2

您不能控制客户端浏览器。由于某些安全问题,不允许脚本控制客户端浏览器。

于 2012-07-25T12:22:58.643 回答
-3

试试这个,它会解决你的问题:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="button" value="Back" onclick="history.go(0);return true;" />
</body>
</html>

干杯!!!!

于 2012-07-25T13:58:37.297 回答