Home  >  Article  >  Web Front-end  >  A brief discussion on onbeforeunload and onunload events in JavaScript_Basic knowledge

A brief discussion on onbeforeunload and onunload events in JavaScript_Basic knowledge

WBOY
WBOYOriginal
2016-05-16 15:26:221135browse

In a recent project, I need to cache part of the content of the page when the user leaves the page. However, I don’t need to cache it when the user refreshes. I only want it to be cached when the user leaves. time

Execute this function. According to Baidu, there are two events: onbeforeunload and onunload, but onbeforeunload will also be executed when the user refreshes. It took me a long time to do this, so I want to make a small summary here

onbeforeunload and onunload events

onbeforeunload definition and usage

The onbeforeunload event is triggered when the current page is about to be left (refreshed or closed).

This event can be used to pop up a dialog box to prompt the user whether to continue browsing the page or leave the current page.

The default prompt message of the dialog box varies according to different browsers. The standard message is similar to "Are you sure you want to leave this page?". This information cannot be deleted.

But you can customize some message prompts to be displayed in the dialog box together with the standard information.

Note: If you do not specify the onbeforeunload event on the 6c04bd5ca3fcae76e30b72ad730ca86d element, you need to add the event on the window object and create custom information using the returnValue attribute (see the following syntax example).

Note: In the Firefox browser, only the default reminder information is displayed (customized information is not displayed).

How to use:

<!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>

or:

<!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>

When the event is triggered, a dialog box with confirmation and cancellation pops up. If you confirm, you will leave the page, and if you cancel, you will continue to stay on this page. Of course you can customize the prompt text.

So, what should I do when I only need to execute this function when I leave, but not when refreshing?

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();
      
    }
 }

In this way, when I leave the page, I can execute my cache code without popping up the prompt box. When I refresh, the prompt box will not pop up and it will not be executed. It is worth mentioning that at this time, ajax should be set to synchronization, that is: async in ajax should be changed to: false;

Browser compatibility

Perfect support for IE, Chrome and Safari

Firefox does not support text reminder messages

Opera does not support

Bugs encountered by IE6 and IE7 when using onbeforeunload

2. Onunload definition and usage

The onunload event occurs when the user exits the page.

Usage is similar to onbeforeunload

window.onunload = function(){
  return "你确定要离开吗"
}
 

Browser compatibility

In IE6, IE7, IE8, it will be executed after refreshing the page, closing the browser, and after page jump;

IE9 will execute the page refresh, but the page jump and closing the browser will not execute;

firefox (including firefox3.6) can be executed after closing the tag, after page jump, and after refreshing the page, but it cannot be executed after closing the browser;

Safari will execute after refreshing the page and page jump, but it will not execute when closing the browser;

Opera and Chrome will not be executed under any circumstances.

Summary

Onunload and onbeforeunload are called when refreshing or closing. They can be specified through window.onunload in the 3f1c4e4b6b16bbbd69b2ee476dc4f83a script or specified in 6c04bd5ca3fcae76e30b72ad730ca86d. The difference is that onbeforeunload is executed before onunload, and it can also prevent the execution of onunload.
Onbeforeunload is also called when the page is refreshed or closed. Onbeforeunload is called when going to the server to read a new page, but it has not yet started reading; while onunload has read the new page that needs to be loaded from the server and is about to replace it. Called when the current page is deleted. Onunload cannot prevent the page from being updated and closed. And Onbeforeunload can do it.

Onload is only executed when the page loads
When the page is closed, onbeforeunload is executed first, and finally onunload
When the page is refreshed, onbeforeunload is executed first, then onunload, and finally onload.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn