使用jquery禁用浏览器的后退按钮?

14
我想实现的是当用户点击注销时禁用浏览器的“返回”按钮,为此我只删除该用户的cookies而不是应用程序中的session。并且希望禁用“返回”按钮。
if(getCookie('username') == ""){
   Disable back button;// we use "window.history.redirect" for javascript i look jquery for this

}
请帮帮我。。

3
据我所知,目前不可能实现。如果您的应用程序无法处理简单的会话Cookie问题,那么让用户浏览器崩溃并不是解决问题的正确方法。相反,请建立一个强大的会话管理系统。 - selfawaresoup
由于您获取了会话ID,它不会影响浏览器的后退功能。因为在设置会话之前,浏览器的后退按钮应该被阻止。(即)默认情况下应该被阻止。换句话说,带有后退按钮的浏览器将执行此操作。 - King of kings
9个回答

28

你需要在pushState中推送你的URL并清除浏览器历史记录:

尝试这个:

$(document).ready(function() {
        window.history.pushState(null, "", window.location.href);        
        window.onpopstate = function() {
            window.history.pushState(null, "", window.location.href);
        };
    });

5
它在最近升级的Chrome 76中停止工作。正在尝试寻找其他解决方案,但目前还没有成功。 - Zack
@Zack 你找到新的解决方案了吗? - Mahsa Seifikar

9

请直接使用以下代码:

window.onload = function () {
    if (typeof history.pushState === "function") {
        history.pushState("jibberish", null, null);
        window.onpopstate = function () {
            history.pushState('newjibberish', null, null);           
        };
    }
    else {
        var ignoreHashChange = true;
        window.onhashchange = function () {
            if (!ignoreHashChange) {
                ignoreHashChange = true;
                window.location.hash = Math.random();                
            }
            else {
                ignoreHashChange = false;   
            }
        };
    }
};

不起作用,请建议其他解决方案。 - Akash lal

5

代码:

<HTML>
    <HEAD>
        <SCRIPT type="text/javascript">    
             window.history.forward();
             function noBack() { 
                  window.history.forward(); 
             }
        </SCRIPT>
    </HEAD>
    <BODY onload="noBack();" onpageshow="if (event.persisted) noBack();" onunload="">
    </BODY>
</HTML>

4
var path = 'Test.aspx'; //write here name of your page 
history.pushState(null, null, path + window.location.search);
window.addEventListener('popstate', function (event) {
    history.pushState(null, null, path + window.location.search);
});

这适用于所有浏览器(除了 < IE10),即使URL有查询字符串附加也可以使用。

甚至不需要使用jQuery。

这里查看如何应用到您的页面。


这段代码只有在从控制台手动执行时才能正常工作。 - Pedro Joaquín

2

这个方法是可行的,因为我自己也在处理移动浏览器、Android 和 iOS 的问题时使用了它。

window.history.forward();
window.onload = function()
{
  window.history.forward();
};

window.onunload = function() {
  null;
};

1

Sunil是正确的,但如果要使用jQuery,请将以下代码粘贴到任何想要防止返回的页面中。我在IE 11、Chrome和FF中进行了测试,效果很好。

$(document).ready(function () {
    function disableBack() {window.history.forward()}

    window.onload = disableBack();
    window.onpageshow = function (evt) {if (evt.persisted) disableBack()}
});

1

这不是你的方法,但你可以使用纯JavaScript禁用任何窗口的导航面板。只需将window.menubarwindow.toolbar的可见性设置为false,如下所示:

window.menubar.visible = false ;
window.toolbar.visible = false ;

更新:

更改现有窗口的菜单栏和工具栏可见性似乎违反了安全协议。(https://developer.mozilla.org/en/DOM/window.menubar)

因此,唯一真正的方法是首先打开一个菜单栏和工具栏设置为“否”的新窗口:

window.open(url,name,"menubar=no,toolbar=no[, additional options]",true) ;

如果将replace参数(最后一个参数)设置为true,则新窗口应该继承打开它的窗口的历史记录。
请参考https://developer.mozilla.org/en/DOM/window.openhttp://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx

2
-:在例如ff中不起作用。 +:是个好主意,但最安全的禁用菜单的方法是打开一个新窗口并设置适当的选项! - user57508
有没有其他方法可以做同样的事情?因为我在这个问题上卡住了,请帮帮我... - user380979

0

简单逻辑:点击前进时向前移动


function preventBack() {
    window.history.forward();
}
 window.onunload = function() {
    null;
};
setTimeout("preventBack()", 0);

请将此JS代码保留在您的页面中,它可以正常工作。

0

通过在网页中添加以下内容,可以防止用户访问安全应用程序中的页面。

使用Apache Shiro的完整示例在此处提供:

https://github.com/NACHC-CAD/web-security-example/releases/tag/v2.0.0

<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />

<script>
    if(performance.navigation.type == 2){
        console.log("Doing reload");   
        location.reload(true);
        console.log("Done with reload");
    }
    console.log("Script loaded.")
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接