js實現監聽瀏覽器關閉和刷新事件-檢測視頻播放時間並提交給後臺程序


監聽瀏覽器關閉事件,實現在刷新時或者瀏覽器關閉前我們可以寫一些業務邏輯

需求1:H5遊戲,在用戶切換了標籤頁,(遊戲界面處於非當前頁面)暫停遊戲

需求2:在線教學視頻,在用戶切換了標籤頁或者關閉瀏覽器後,暫停視頻播放,並及時記錄觀看時間,發送到後臺程序

實現:

主要是利用兩個API: document.onvisibilitychange  和  window.onbeforeunload

visibilitychange事件是瀏覽器新添加的一個事件,當瀏覽器的某個標籤頁切換到後臺,或從後臺切換到前臺時就會觸發該消息,現在主流的瀏覽器都支持該消息了,例如Chrome, Firefox, IE10等。在google瀏覽器中測試,關閉瀏覽器也可以觸發這個事件

visibilitychange兼容性:(僅參考)

æµè§å¨æ¯ææåµ

 

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

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

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

所以這事件中我們不需要寫返回值,寫了返回值後會彈出我們控制不了的提示信息

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
    <script>
        document.onvisibilitychange = function () {
            if (document.visibilityState === 'hidden') {
                localStorage.setItem("onvisibilitychange", Math.random())
            }
        }
        window.onbeforeunload = function () {
            $.post("/home/index", function (data) {

            });
            localStorage.setItem("onbeforeunload", Math.random())
        }
    </script>
</body>
</html>

 

vue中要寫到mounted裏面

mounted() {
    let _this = this;
    if (typeof document.addEventListener === "undefined") {
      console.error("瀏覽器不支持addEventListener,請升級");
    } else {
      document.addEventListener("visibilitychange", () => {
        if (document.visibilityState == "hidden") {
          _this.sendCurVideoTime(localStorage.getItem("webviewDuration"));
        }
      });
      window.addEventListener("beforeunload", () => {
         this.sendCurVideoTime(localStorage.getItem("webviewDuration"));
      });
    }
  },

 

另外發現vue中函數:beforeDestroy 可以監測到瀏覽器關閉事件,但不能監測刷新事件


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章