js对浏览器返回事件的捕获及禁用功能

来源:互联网 发布:php商城框架 编辑:程序博客网 时间:2024/05/20 11:52

需求由来:

在做微信在线考试功能的时候,由于答题信息是通过ajax实时入库,所以要禁用浏览器的返回功能,或者监听返回事件,让其在返回时直接提交试卷。

监听浏览器返回事件:

<script>$(function(){pushHistory();//监听返回事件window.addEventListener("popstate", function(e) {//在此处理自己的业务}, false);});function pushHistory() {var state = {title: "title",url: "#"};window.history.pushState(state, "title", "#");}</script>

禁用浏览器返回事件:

history.pushState(null, null, document.URL);     window.addEventListener('popstate', function () {     history.pushState(null, null, document.URL);});
对于代码不做过多解释,但是实际使用过程中会存在一些问题:
1,对于监听浏览器返回事件,其实这样的做法只能是当前页面是最后一个页面的时候有效,否则容易出现问题。假如有A->B->C三个页面的跳转顺序。假如在B页面中使用这种写法,相当于是在window.history中添加一个当前页面的空对象,在触发window.addEventListener("popstate",function())的时候,相当于是返回上一个页面,也就是自己本身。但是假如此时我从B页面跳到C页面,然后在C页面中进行返回操作,也就意味着history中的对象顺序改变,返回的不是B,而是一个#空页面,所以会报404.所以这个方法要慎用。
2,对于禁用浏览器返回事件的代码,其实跟第一个类似,但是它往history中存放的是当前页面本身,所以不会存在C页面返回上一页报404的问题。
原创粉丝点击