Javascript学习之路:事件在页面加载和关闭时的执行顺序

👉前言

在实际项目中,如果我想在打开浏览器页面加载时执行某些任务,比如获取当前页面的全部或部分数据,优先想到的事件是onload,当关闭页面时,我们也常常会使用onunload事件。但是这两个事件却有一定的局限性,如果第一次加载页面时,onload事件一定会执行,而如果页面从缓存中获取,onload事件则无法执行;比如使用onunload事件,关闭页面时,页面是不会保存在缓存中的;又比如,我想在页面加载解析完,但是外部资源(图片,文件,视频,iframe,脚本,样式表等)还在加载中就去执行某些任务又应该怎么办?下面本文将为大家一一阐述资源状态型事件们,希望走过,路过的同行大神们多多指点👏👏。

在这里插入图片描述

今天,我要阐述的资源状态型事件有6个,按照执行先后排序分别是

  • DOMContentLoaded
  • load
  • pageshow
  • beforeunload
  • pagehide
  • unload

👉1. DOMContentLoaded事件

  • 网页下载并解析完成以后,所有外部资源(样式表、脚本、iframe 等等)还没有下载时执行。
  • 这时,页面的dom树已经生成,所以浏览器会在document对象上触发 DOMContentLoaded 事件。
  • 案例
    document.addEventListener('DOMContentLoaded', function (event) {
        console.log('执行任务');
    });
    

👉2. load事件

  • load事件,页面和资源加载成功触发,页面或资源从浏览器缓存获取,则不会执行该事件
  • 案例
    window.addEventListener('load', function(event) {
       console.log('所有资源都加载完成');
     });
    
  • error在页面或资源加载失败时触发
    window.addEventListener('error', function(event) {
     console.log('资源加载失败');
    });
    

👉3. pageshow 事件

  • pageshow事件在页面第一次加载和从缓存中加载时都可以触发。而load事件,DOMContentLoaded事件只有在页面第一次加载时才会执行。因为缓存中的样子通常是load事件的监听函数运行后的样子,所以浏览器的渲染机制认为没必要重复执行,当然初始化的javascript脚本也不会执行。
  • 也可以理解为该事件只在浏览器的history对象发生变化时触发
  • persisted事件对象的属性,返回的数据类型是布尔值,返回false是第一次加载,返回true,是从缓存中加载。
  • 案列
    getList(){
        alert("初始化加载数据")
    }
      window.addEventListener('pageshow',function(e)
         if(e.persisted){ 
             getList()
         }
     })
    

👉4.beforeunload事件

  • beforeunload事件在窗口,文档,各种资源将要卸载时触发,可以用来防止客户端不小心卸载资源。

  • returnValue 对象属性,浏览器就会弹出一个二次确认框,询问客户端是否需要卸载该资源,returnValue如果是非空字符串,那么则为客户端指定的内容,点击取消,资源就不会卸载。

  • 但是需要注意的是,大多数浏览器在对话框中只显示默认文本,无论是否设置returnValue,有的浏览器调用event.preventDefault(),也会弹出对话框。

  • 案例

     window.addEventListener('beforeunload', function (e) {
           var  message = '确认关闭窗口?';
           e.returnValue = message;
       return message;
      })
    
  • 一旦使用了beforeunload事件修改初始状态,浏览器就不会缓存当前网页

👉5.pagehide事件

  • 它与unload事件的区别在于,如果在window对象上定义unload事件的监听函数之后,页面不会保存在缓存中,而使用pagehide,可以控制页面保是否存在缓存中

  • persisted事件属性

    • 设置true,就表示页面要保存在缓存中
    • 设置false,网页不保存在网页中
  • 案例

    window.addEventListener('pagehide', function(event){  
    });
    

👉6.unload事件

  • unload事件在窗口关闭或者document对象将要卸载时触发
  • unload事件触发,文档处于特殊的状态,所有资源依然存在,但是对用户来说,是看不见的,用户交互会全部无效,这个事件也无法取消,即使在监听函数里面抛出错误,也不能停止文档的卸载。
  • 一旦使用了unload事件,浏览器就不会缓存当前网页
  • 案例
    window.addEventListener('unload',function(event){
    	alert('文档将要卸载')
    })
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/291916.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图解算法数据结构-LeetBook-回溯01_机械累加器

请设计一个机械累加器,计算从 1、2… 一直累加到目标数值 target 的总和。注意这是一个只能进行加法操作的程序,不具备乘除、if-else、switch-case、for 循环、while 循环,及条件判断语句等高级功能。 注意:不能用等差数列求和公式…

多级缓存、OpenResty、Redis分布式缓存、进程缓存

目录标题 一、预期表现二、环境配置1、nginx环境2、OpenResty环境3、redis环境4、进程缓存环境 三 、主要编码工作3.1、OpenResty编码openresty/nginx/conf/nginx.conflualib/redis_common.lualualib/common.luanginx/lua/item.lua 3.2、进程缓存编码 四、结果分析4.1 初始无缓…

【KingbaseES】实现MySql函数len

原理:调用length函数返回到结果中 CREATE OR REPLACE FUNCTION len(input_text text) RETURNS integer AS $$ BEGIN RETURN length(input_text); END; $$ LANGUAGE plpgsql;结果如下:

Docker介绍、常用命令、项目部署

什么是Docker 简单说:Docker就是一个虚拟机,专业说:它是一个开源的容器平台。它和我们常用的VMware有很多相似的地方。 名词解释 镜像/images 由本体打包出来的文件。并不是文件本身,但是具有该文件的功能。举个不太贴切的例子&…

毛虫目标检测数据集VOC格式550张

毛虫,一种令人惊叹的生物,以其独特的外貌和习性,成为了自然界中的一道亮丽风景。 毛虫的外观非常特别,身体呈圆柱形,表面覆盖着许多细小的毛发,这使得它们在叶子上伪装得非常好。它们的头部有一对坚硬的颚…

【JavaSE】P1~P32 进制,字节,Java代码规范,常量,变量,运算符

目录 IDEA常用快键键和快捷用法一、需要复习的重难点概念1 进制、字节、DOS操作命令语句进制及转化字节DOS系统命令提示符 2 Java 常用代码规范3 常量及常量的打印4 变量数据类型及取值范围变量的概念和使用数据类型转换ASCII码表(128种)基本数据类型极其…

P1019 [NOIP2000 提高组] 单词接龙

网址如下:P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 很怪,不知道该说什么 我试了题目给的第一个测试点的输入,发现输出和测试点的一样,但是还是WA 不是很懂为什么 有没有大佬帮我看一下…

用 Python 抓取 bilibili 弹幕并分析!

01 实现思路 首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。 02 弹幕数据 平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码…

14.两数之和

题目 class Solution {public int[] twoSum(int[] nums, int target) {int[] ret {-1,-1};for(int i0;i<nums.length;i) {for(int ji1;j<nums.length;j) {if(nums[i] nums[j] target) {ret[0] i;ret[1] j;}}}return ret;} }

顶顶通呼叫中心中间件配置背景音乐(mod_cti基于FreeSWITCH)

介绍 配置外呼任务拨打时的背景音乐&#xff0c;一步步配置 一、配置队列外呼模板 打开ccadmin->队列呼叫模板->添加一条变量根据下方图片配置 二、上传音乐文件 后缀格式为.wav格式的声音文件&#xff0c;声音文件需要上传在这个目录&#xff1a;/ddt/fs/sounds/ct…

【编译原理】期末预习PPT前四章笔记II

看了看学校的ppt&#xff0c;记的比较随意O.o 因为我的考试范围里边没有简答所以概念什么的没怎么记 没有简答只有选择真是太好了嘿嘿嘿 目录 I. 概述&#xff08;好多字。。&#xff09; 一、高级语言的分类 1、体裁 2、执行方式 二、各种语言的执行方式 三、编译程序…

基于ssm的医院交互系统+vue论文

医院交互系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的医院交互信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理模…

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…

RK3568 学习笔记 : ubuntu 20.04 下 Linux-SDK 镜像烧写

前言 开发板&#xff1a;【正点原子】ATK-DLRK3568 开发板&#xff0c;编译完 Linux-SDK 后&#xff0c;生成了相关的镜像文件&#xff0c;本篇记录一下 镜像烧写&#xff0c;当前编译环境在 VMware 虚拟机中&#xff0c;虚拟机系统是 ubuntu 20.04 此次烧写还算顺利&#xff…

2024腾讯云轻量应用服务器详细介绍_轻量全解析

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

pod探针

Pod进阶&#xff1a; 探针* Poststart Prestop pod的声明周期开始&#xff1a; k8s的pod重启策略&#xff1a; Always deployment的yaml三种模式都可以&#xff0c;不论正常退出还是非正常退出都重启 OnFailure:只有状态码非零才会重启&#xff0c;正常退出事不重启的 …

产品手册非常重要,对产品推广的有很大的影响

如今产品手册作为企业传递产品信息的重要媒介&#xff0c;其制作与呈现方式对于产品的推广和销售具有至关重要的影响。一个优秀的产品手册不仅能够帮助消费者更好地了解产品&#xff0c;还能提升品牌形象&#xff0c;进一步推动产品的市场推广。 | 一、产品手册的重要性体现在以…

mysql 增删改查 数据库基本操作

mysal 数据库基本操作 1&#xff0c;库相关 创建数据库 create database 库名&#xff1b; 查看有哪些数据库 show databases&#xff1b; 结构性删除数据库 drop database 库名&#xff1b; 查看数据库基本信息&#xff08;字符集&#xff09; show create database 库名&am…

人工智能AI与3D视觉技术的结合正在引领新一代移动机器人的革新

随着科技的飞速发展&#xff0c;人工智能AI与3D视觉技术的结合正在引领新一代移动机器人的革新。富唯智能移动机器人&#xff0c;以其独特的3D视觉技术&#xff0c;赋予了移动机器人一双“智慧之眼”&#xff0c;从而为现代工业自动化带来了前所未有的突破。 富唯智能移动机器…
最新文章