• 【VUE/JS】vue和js禁止浏览器页面后退


    1、vue 禁止浏览器后退
    需求是:需要某个路由不能通过浏览器返回,同时不影响相互之间的切换
    整理一下解决方法 和 使用方法:

    1.在路由配置中给这个路由添加meta信息,比如:

    { path: '/home', component: xxx, meta: {allowBack: false} }

    2.在全局的router.beforeEach 函数里面获取allowBack的状态,同时更新vuex的allowBack的值,如:

    let allowBack = true // 给个默认值true
    if (to.meta.allowBack !== undefined) {
    allowBack = to.meta.allowBack
    }
    if (!allowBack) {
    history.pushState(null, null, location.href)
    }
    store.dispatch('updateAppSetting', {
    allowBack: allowBack
    })

    **这段代码得写在next()的后面,因为写在next()前面location.href并不是to的地址,这点跟vue1.0有点不同。
    location.href 获取的仍不是to的地址,所以得根据to的信息来拼起来

    3.接下来就是最核心的了,在app.vue的mounted里面写onpopstate事件:
    window.onpopstate = () => { if (!this.allowBack) { // 这个allowBack 是存在vuex里面的变量 history.go(1) } }

    2、js禁止页面后退

    现在很多的内部系统,一些界面,都是用户手动点击退出按钮的。但是为了避免,用户误操作 点击浏览器后退,或者用鼠标手势后退什么的。容易出现误操作。
    所以在有些页面上,适当的禁用浏览器的后退,是可以提高很大的用户体验。
    在网上查,可以查到很多js禁用后退的材料。

    用的多的方法如下:

    1、回退后,产生一个前进事件。
    这种方式,不算是一个满意的解决方式。因为用户能体验到,界面的后退,前进。体验不好。

    <script type="text/javascript">

    //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外
    function banBackSpace(e){
    var ev = e || window.event;//获取event对象
    var obj = ev.target || ev.srcElement;//获取事件源

    var t = obj.type || obj.getAttribute('type');//获取事件源类型

    //获取作为判断条件的事件类型
    var vReadOnly = obj.getAttribute('readonly');
    var vEnabled = obj.getAttribute('enabled');
    //处理null值情况
    vReadOnly = (vReadOnly == null) ? false : vReadOnly;
    vEnabled = (vEnabled == null) ? true : vEnabled;

    //当敲Backspace键时,事件源类型为密码或单行、多行文本的,
    //并且readonly属性为true或enabled属性为false的,则退格键失效
    var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")
    && (vReadOnly==true || vEnabled!=true))?true:false;

    //当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效
    var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")
    ?true:false;

    //判断
    if(flag2){
    return false;
    }
    if(flag1){
    return false;
    }
    }

    //禁止后退键 作用于Firefox、Opera
    document.banBackSpace;
    //禁止后退键 作用于IE、Chrome
    document.banBackSpace;

    </script>

    3、终极方案:
    也是查找了好多资料才找到的,这种方式,可以消除 后退的所有动作。包括 键盘、鼠标手势等产生的后退动作。

    <script language="javascript">
    //防止页面后退
    history.pushState(null, null, document.URL);
    window.addEventListener('popstate', function () {
    history.pushState(null, null, document.URL);
    });
    </script>

    现在,我们项目中就使用了第三种方式。在常用浏览器中,都可以禁用了后退。

  • 相关阅读:
    C++ malloc 和 new 的函数说明
    C++ const 和static的总结以及使用
    动态库与静态库的区别
    C++引用和指针的区别
    gdb的调试常用命令
    FFMPEG的函数翻译文档
    STL在数组算法的使用
    iOS开发 给Label加下划线、中划线
    更改字符串颜色(长度不确定,有服务器返回)
    iOS 获取键盘高度
  • 原文地址:https://www.cnblogs.com/donve/p/10875252.html
Copyright © 2020-2023  润新知