99如果该事件对象的` returnValue ` 属性是一个非空字符串,那么浏览器就会弹出一个对话框,询问用户是否要卸载该资源。但是,用户指定的字符串可能无法显示,浏览器会展示预定义的字符串。如果用户点击“取消”按钮,资源就不会卸载。
1010
1111``` javascript
12- window .addEventListener (' beforeunload' , function (event ) {
12+ window .addEventListener (' beforeunload' , function (event ) {
1313 event .returnValue = ' 你确定离开吗?' ;
1414});
1515```
@@ -19,17 +19,17 @@ window.addEventListener('beforeunload', function(event) {
1919浏览器对这个事件的行为很不一致,有的浏览器调用` event.preventDefault() ` ,也会弹出对话框。IE 浏览器需要显式返回一个非空的字符串,才会弹出对话框。而且,大多数浏览器在对话框中不显示指定文本,只显示默认文本。因此,可以采用下面的写法,取得最大的兼容性。
2020
2121``` javascript
22- window .addEventListener (' beforeunload' , function (e ) {
22+ window .addEventListener (' beforeunload' , function (e ) {
2323 var confirmationMessage = ' 确认关闭窗口?' ;
2424
2525 e .returnValue = confirmationMessage;
2626 return confirmationMessage;
2727});
2828```
2929
30- 注意,许多手机浏览器默认忽略这个事件,桌面浏览器也有办法忽略这个事件。所以,它可能根本不会生效,不能依赖它来阻止用户关闭窗口。
30+ 注意,许多手机浏览器默认忽略这个事件,桌面浏览器也有办法忽略这个事件。所以,它可能根本不会生效,不能依赖它来阻止用户关闭窗口。另外,一旦使用了 ` beforeunload ` 事件,浏览器就不会缓存当前网页。因为执行了这个事件以后,缓存页面就没意义了。
3131
32- 另外,一旦使用了 ` beforeunload ` 事件,浏览器就不会缓存当前网页。因为执行了这个事件以后,缓存页面就没意义了 。
32+ 基本上,只有一种场合可以监听 ` unload ` 事件,其他情况都不应该监听:用户修改了表单,还没有保存就要离开 。
3333
3434### unload 事件
3535
@@ -43,7 +43,7 @@ window.addEventListener('unload', function(event) {
4343});
4444```
4545
46- 跟 ` beforeunload ` 事件一样,一旦使用了` unload ` 事件,浏览器就不会缓存当前网页,理由同上。
46+ 手机上,浏览器或系统可能会直接丢弃网页,这时该事件根本不会发生。而且跟 ` beforeunload ` 事件一样,一旦使用了` unload ` 事件,浏览器就不会缓存当前网页,理由同上。因此,任何情况下都不应该依赖这个事件,指定网页卸载时要执行的代码,可以考虑完全不使用这个事件 。
4747
4848### load 事件,error 事件
4949
@@ -91,6 +91,8 @@ window.addEventListener('pageshow', function(event){
9191
9292如果页面包含` <frame> ` 或` <iframe> ` 元素,则` <frame> ` 页面的` pageshow ` 事件和` pagehide ` 事件,都会在主页面之前触发。
9393
94+ 注意,这两个事件只在浏览器的` history ` 对象发生变化时触发,跟网页是否可见没有关系。
95+
9496### popstate 事件
9597
9698` popstate ` 事件在浏览器的` history ` 对象的当前记录发生显式切换时触发。注意,调用` history.pushState() ` 或` history.replaceState() ` ,并不会触发` popstate ` 事件。该事件只在用户在` history ` 记录之间显式切换时触发,比如鼠标点击“后退/前进”按钮,或者在脚本中调用` history.back() ` 、` history.forward() ` 、` history.go() ` 时触发。
0 commit comments