在最近的項目中,須要作到一個時間,就是用戶離開頁面的時候,我須要緩存頁面其中一部分的內容,可是我不須要用戶刷新的時候也緩存,我只但願在我用戶離開的時候javascript
執行這個函數。百度之,有onbeforeunload與onunload這兩個事件,可是onbeforeunload在用戶刷新的時候也會執行。搞得我弄的挺久的,因此想在這裏作一個小小的總結html
onbeforeunload與onunload事件java
onbeforeunload 事件在即將離開當前頁面(刷新或關閉)時觸發。ajax
該事件可用於彈出對話框,提示用戶是繼續瀏覽頁面仍是離開當前頁面。瀏覽器
對話框默認的提示信息根據不一樣的瀏覽器有所不一樣,標準的信息相似 "肯定要離開此頁嗎?"。該信息不能刪除。緩存
但你能夠自定義一些消息提示與標準信息一塊兒顯示在對話框。async
注意: 若是你沒有在 <body> 元素上指定 onbeforeunload 事件,則須要在 window 對象上添加事件,並使用 returnValue 屬性建立自定義信息(查看如下語法實例)。函數
注意: 在 Firefox 瀏覽器中,只顯示默認提醒信息(不顯示自定義信息)。spa
使用方法:firefox
一、
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body onbeforeunload="return test()"> </body> <script type="text/javascript"> function test(){ return "你肯定要離開嗎"; } </script> </html>
或者:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> </body> <script type="text/javascript"> window.onbeforeunload=function(){ return "你肯定要離開嗎"; } </script> </html>
事件觸發的時候彈出一個有肯定和取消的對話框,肯定則離開頁面,取消則繼續待在本頁。固然你能夠自定義提示文本。
那麼,當我只須要在我離開時執行這個函數,而刷新的時候不執行,那怎麼作呢?
window.onbeforeunload = function() { var n = window.event.screenX - window.screenLeft; var b = n > document.documentElement.scrollWidth - 20; if (!(b && window.event.clientY < 0 || window.event.altKey)) { //window.event.returnValue = "真的要刷新頁面麼?"; //這裏放置我想執行緩存的代碼 cacheFunction(); } }
這樣,我離開頁面時,能夠執行個人緩存代碼,而不彈出提示框,我刷新時也不彈出提示框,也不執行。值得一提的時,這個時候,要將ajax設置爲同步,即:ajax裏面的 async改成: false;
IE、Chrome、Safari 完美支持
Firefox 不支持文字提醒信息
Opera 不支持
onunload 事件在用戶退出頁面時發生。
使用方法和onbeforeunload相似
window.onunload = function(){ return "你肯定要離開嗎" }
IE6,IE7,IE8 中 刷新頁面、關閉瀏覽器以後、頁面跳轉以後都會執行;
IE9 刷新頁面 會執行,頁面跳轉、關閉瀏覽器不能執行;
firefox(包括firefox3.6) 關閉標籤以後、頁面跳轉以後、刷新頁面以後能執行,但關閉瀏覽器不能執行;
Safari 刷新頁面、頁面跳轉以後會執行,但關閉瀏覽器不能執行;
Opera、Chrome 任何狀況都不執行。