JS之onunload、onbeforeunload事件詳解

来源:http://www.cnblogs.com/moqiutao/archive/2017/11/03/7773919.html
-Advertisement-
Play Games

簡介 onunload,onbeforeunload都是在刷新或關閉時調用,可以在<script>腳本中通過 window.onunload來調用。區別在於onbeforeunload在onunload之前執行,它還可 以阻止onunload的執行。 onbeforeunload 是正要去伺服器讀 ...


簡介

onunload,onbeforeunload都是在刷新或關閉時調用,可以在<script>腳本中通過 window.onunload來調用。區別在於onbeforeunload在onunload之前執行,它還可 以阻止onunload的執行。

onbeforeunload 是正要去伺服器讀 取新的頁面時調用,此時還沒開始讀取;而onunload則已經從伺服器上讀到了需要載入的新的頁面,在即將替換掉當前頁面時調用。

onunload事件

onunload 事件在用戶退出頁面時發生。

onunload 發生於當用戶離開頁面時發生的事件(通過點擊一個連接,提交表單,關閉瀏覽器視窗等等。)

註意: onunload 事件同樣觸發了頁面載入事件(+ onload 事件)。

語法

直接使用在html中:

<body onload="SomeJavaScriptCode">

註:以下 HTML 標簽支持 onunload :<body>, <frameset>

JavaScript 中:

window.onunload=function(){SomeJavaScriptCode};

例子:

//JS document
window.onunload = function(){
alert("unload is work");
}

瀏覽器相容情況

  • IE瀏覽器 頁面跳轉刷新頁面能執行,但關閉瀏覽器不能執行
  • firefox 頁面跳轉能執行,但刷新頁面、關閉瀏覽器不能執行;
  • Safari 刷新頁面、頁面跳轉,關閉瀏覽器都會執行;
  • Opera、Chrome任何情況都不執行。

如圖所示:

大體一句話描述:IE, Firefox, 和 Safari 支持 onunload 事件, 但是 Chrome 或者 Opera 不支持該事件。

onbeforeunload事件

onbeforeunload 事件在即將離開當前頁面(刷新或關閉)時觸發。

該事件可用於彈出對話框,提示用戶是繼續瀏覽頁面還是離開當前頁面。

對話框預設的提示信息根據不同的瀏覽器有所不同,標準的信息類似 "確定要離開此頁嗎?"。該信息不能刪除。

但你可以自定義一些消息提示與標準信息一起顯示在對話框。

註意: 如果你沒有在 <body> 元素上指定 onbeforeunload 事件,則需要在 window 對象上添加事件,並使用 returnValue 屬性創建自定義信息(查看以下語法實例)。

語法

html中使用:

<element onbeforeunload="myScript">

JavaScript 中:

object.onbeforeunload=function(){myScript};

JavaScript 中, 使用 addEventListener() 方法:

object.addEventListener("beforeunload", myScript);

註意: Internet Explorer 8 及更早 IE 版本不支持 addEventListener() 方法。

JS中使用例子寫法一:

//JS document
window.onbeforeunload = function(){
return "onbeforeunload is work";
}

return 的值 為你需要告訴用戶的提示信息如上面demo的話瀏覽器的提示是這樣(firefox ,Chrome並不支持文字提醒)

JS中使用例子寫法二:

window.onbeforeunload = function(event) {
    event.returnValue = "我在這寫點東西...";
};

值得註意的是,網上流傳說 可以通過檢查 e.clientX e.clientY 判斷 用戶是否點擊 右上角關閉瀏覽器的,但是實踐發現 只有 IE6,IE7,IE8 能獲取得到具體數值,其他瀏覽器均為 undefined。

瀏覽器相容情況

  • IE、Safari 完美支持
  • Firefox、Chrome 不支持文字提醒信息
  • Opera 不支持

如圖所示:

IE6,IE7 使用 onbeforeunload 遇到的bug

凡是 <a> 標簽 都會觸發 onbeforeunload事件 包括 href=”javascript:void(0)” 這種。

在IE6,IE7 下麵 點擊 裡面的 a 標簽,蛋疼的事情就發生了。

解決方法:給這 a標簽的 父級 添加 onclick=function(){return false} 即可,不過添加了這個之後 要確保 父級裡面沒有 input type=”checkbox” 的標簽,否則會導致其無效不可點擊。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vue 2.5 發佈了:15篇前端熱文回看 2017-11-02 前端大全 (點擊上方公眾號,可快速關註) 本文精選了「前端大全」2017 年 10 月的 15 篇熱門文章。其中有職場分享、技術分享和技術資源。 註:以下文章,點擊標題即可閱讀 《Vue 2.5 發佈了》 我們很高興宣佈 Vue 2. ...
  • 為了方便演示,我已經把一個靜態DEMO部署到github,傳送門 關於項目訪問,因為讀取遠程json數據,直接用瀏覽器打開有安全限制.請將項目放到tomcat啟動訪問或者直接用idea/webstorm打開項目直接右鍵打開,如下圖所示: 完整代碼單獨放到了github:https://github. ...
  • 我最近在做一個vue + element-UI + vue-resource + vuex項目的時候,遇到了一個對象的問題。 當我們在項目需要 複製一個對象到另一個對象並且 被覆制的對象不能受複製後的對象的影響。 我先總結下 我們哪些方法可以複製對象 以上的方法中 都可以把一個對象的鍵值賦值給另一個 ...
  • 前幾天看到這樣的問題 先說問題吧:感覺前端涉及到的東西太多了,自己也很浮躁,看了挺多書,可是代碼缺敲得卻不多。技術菜,又什麼都想學,比如現在糾結要不要先學scss或者php或者angularjs,backbone等框架,還是深入學習html5+css3? 然後看了一些招聘要求發現又有一些坑要填,經常 ...
  • 阿裡雲oss上傳圖片的時候報錯如上, 解決辦法,把系統時間自動同步成對應的時區的時間。 ...
  • 實現效果: 實現原理: 給關閉按鈕綁定點擊事件,點擊以後觸發動畫效果。利用jQuery的animate方法,先讓顯示天氣的盒子高度變為0,接著讓整個包含天氣和事件的盒子寬度變為0,最後通過將display屬性值設為none,使得close按鈕消失。 實現代碼: ...
  • 一、函數聲明、函數表達式、匿名函數1.函數聲明:function fnName () {…};使用function關鍵字聲明一個函數,再指定一個函數名,叫函數聲明。2.函數表達式 var fnName = function () {…};使用function關鍵字聲明一個函數,但未給函數命名,最後將 ...
  • 最近在搞一個被很多人改了的框架,天天看代碼看的頭的暈了,不過感覺進步還挺大的,自己做了一個後臺可配置前臺查看兩個庫不同數據範圍的東西,還挺滿意,那天拿出來分享一下,今天先說一個這幾天做的功能,就是html頁面的查找功能。 這個功能主要是實現在查找框內輸入字元,之後按後面的上一個下一個按鈕,會自動把查 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...