Search

与我们合作

我们专注:网站策划设计、网络多媒体传播、网站优化及网站营销、品牌策略与设计
主营业务:网站建设、移动端微信小程序开发、VI设计、网络运营、云产品·运维解决方案

有一个品牌项目想和我们谈谈吗?

您可以填写右边的表格,让我们了解您的项目需求,这是一个良好的开始,我们将会尽快与您取得联系。当然也欢迎您给我们写信或是打电话,让我们听到您的声音

您也可通过下列途径与我们取得联系:

地 址: 深圳.龙岗区大运软件小镇11栋3楼

电 话: 138 2888 4598 / 138 0880 9053

网 址: http://www.appvx.cn

快速提交您的需求 ↓

单页应用vue等页面未保存刷新关闭返回等确认提示

时间:2018-08-02 浏览:7499 编辑:深正互联 来源:互联网

单页应用,例如vue,react,项目中有些编辑页面不是时时保存的。用户做了半天,刷新了页面,或者关闭了页面,就需要重新制作。因此,刷新,返回,关闭页面的时候进行用户提示,显得很重要。但是这个单页应用,用户在刷新、关闭、历史返回中如何制作呢?

js

vue 路由守卫

刚刚查看了一下最先版本的Vue Router 官方文档,比以前的文档详细了一些。新版的Vue Router文档中,很详细的写了组件内的守卫,

最后提到了如下方法:

beforeRouteLeave (to, from , next) {

  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')

  if (answer) {

    next()

  } else {

    next(false)

  }

}

文档中说,这个方法常用来禁止用户在还未保存修改前突然离开。

但是,这个组件内的守卫,监听不了浏览器关闭,浏览器刷新。只能监听到历史返回啊~~~

这,这,不是我想要的效果!

我要的效果是能监听到浏览器关闭、刷新以及浏览器历史返回等。

其他方法

针对这种情况,只能用我很久以前用过的方式了,onbeforeunload ,就是我以前文章写得js关闭浏览器事件,只能用这个方法来监听浏览器关闭和刷新了。

MDN上,关于onbeforeunload是如下这么示例的:

window.onbeforeunload = function (e) {

  e = e || window.event;

  // 兼容IE8和Firefox 4之前的版本

  if (e) {

    e.returnValue = '关闭提示';

  }

  // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+

  return '关闭提示';

};

假如你在单页应用vue 的mounted()中,直接写了上了上面那段!

那么问题来了:

问题一

你会发现谷歌浏览器机制修改了,你的关闭提示,相关文字死活没有生效,而是出现如下如:

问题二

你的页面是单页应用, window.onbeforeunload 在window下面,当你页面切换的时候,你不想提示的页面也会出现如上图的那种系统提示!

针对这两个问题,如何解决呢?

解决方案

问题二非常好解决,根据路由判断一下就可以了。例如当前路由是“/layout/add”,判断如下:

let _this = this

    window.onbeforeunload = function (e) {

      if(_this.$route.fullPath =="/layout/add"){

          e = e || window.event;

          // 兼容IE8和Firefox 4之前的版本

          if (e) {

            e.returnValue = '关闭提示';

          }

          // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+

          return '关闭提示';

      }else{

        window.onbeforeunload =null

      }

};

其他页面就不会出现了,仅仅在/layout/add这个页面出现提示。

问题一解决:

问题一比较棘手。目前其实没有很好的解决方案,因为beforeunload弹框没有办法美化。

我尝试用webAssenby 和WshShell 调用浏览器底层东西。但是效果不是很理想,在这里就不多罗列了。

假如有小伙伴有好的解决方案,欢迎指教,谢谢!

本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
GO 欣赏案例
查看经典案例
在线咨询
电话咨询
0755-36630177
返回顶部
在线咨询 获取报价 电话咨询
获取报价
您的称呼:

*

您的电话:

*

您的邮箱:

*

提交 重置
重要的事情,电话里聊

接通客服

不方便的时候线上咨询,在线等哦