曾自己借助阿里云和hexo搭了个站点,现已废弃,过往写的博客暂挪到此处。
title: unload事件只偶尔触发
date: 2016-12-12 16:55:22
tags:
- 技术
- Javascript
- 浏览器
- TODO
任务:在页面unload的时候发送此次访问页面滚动的最大值。
实现:在unload时绑定回调函数,给远程服务器发送数据。
问题:结果是偶尔发送,大部分情况下未发送。并且未发现什么规律。
原因:
谷歌良久,得到的两个观点:
1)unload事件不兼容,在很多浏览器下不触发;
2)unload时页面unload和给unload绑定的回调函数,在同时执行,所以不能在unload时做耗时的工作。
分析:
1)跟我的情况不符合,因为如果是因为chrome浏览器不支持,就不会出现偶尔发送的情况。
2)可能是。
解决:
1)给beforeunload和unload 事件 都绑定 该回调函数;
2)发送请求时采用同步的方式:
request.open('GET', '/bar/foo.txt', false); // `false` makes the request synchronous
3)没有办法解决。(这是网上百分之八九十的答案,但都是针对unload事件兼容的答案。)
最后我采用了1)的方式就解决问题了,所以2)就没有去尝试。
其他学到的知识:
1)在beforeunload事件时返回一个字符串,会在页面unload前展示给用户,并询问一次是否真的要离开页面。类似于一个confirm。这是浏览器自己做的。
2)在beforeunload和unload时,alert都失效。
TODO:pagehide和unload的区别?
看了mdn,知道概念,但是心里依然没数。
网友评论