首页 >web前端 >js教程 >如何可靠地检测浏览器后退按钮点击并强制执行页内导航?

如何可靠地检测浏览器后退按钮点击并强制执行页内导航?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-13 10:15:11505浏览

How Can I Reliably Detect Browser Back Button Clicks and Enforce In-Page Navigation?

检测浏览器后退按钮点击并强制执行页内导航的跨浏览器技术

检测浏览器后退按钮点击并强制使用使用井号标签 (#) 系统的页内导航系统可以是

浏览器后退按钮检测

单独使用 window.onhashchange 的传统方法并不可靠,因为它也会在页内元素更改哈希时触发。为了解决这个问题,采用了一种利用 document.onmouseover、document.onmouseleave 和布尔标志 (window.innerDocClick) 的新技术。当用户鼠标进入文档区域时,window.innerDocClick 设置为 true,当鼠标离开时,设置为 false。这允许使用以下 window.onhashchange 处理程序:

window.onhashchange = function() {
    if (window.innerDocClick) {
        window.innerDocClick = false;
    } else {
        if (window.location.hash != '#undefined') {
            goBack();
        } else {
            history.pushState("", document.title, window.location.pathname);
            location.reload();
        }
    }
}

页内后退按钮强制

仅通过页内后退按钮控制后退导航,历史数组 (window.location.lasthash) 用于在用户浏览界面时存储先前的哈希值。页内后退按钮功能 (goBack) 使用此数组导航到上一页。

function goBack() {
    window.location.hash = window.location.lasthash[window.location.lasthash.length-1];
    window.location.lasthash.pop();
}

抑制退格键

以防止用户使用退格键触发后退按钮,可以添加以下代码片段:

$(function(){
    /*
     * this swallows backspace keys on any non-input element.
     * stops backspace -> back
     */
    var rx = /INPUT|SELECT|TEXTAREA/i;

    $(document).bind("keydown keypress", function(e){
        if( e.which == 8 ){ // 8 == backspace
            if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
                e.preventDefault();
            }
        }
    });
});

以上是如何可靠地检测浏览器后退按钮点击并强制执行页内导航?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn