$.(fn) vs document.body.onload vs window.onload

eval()不是函数,是JavaScript安全边界的紧急逃生舱口 eval()是JavaScript中一种动态执行字符串代码的机制,其本质并非普通函数调用,而是绕过语法解析、作用域隔离与编译优化的语言级后门。它破坏静态分析能力,导致XSS风险放大、CSP策略失效、V8隐藏类退化及内存泄漏。在金融、政务、SaaS等高敏场景中,eval常成为攻击链起点——从用户输入注入到Worker沙箱逃逸,再到堆内存耗尽崩溃。现代替代方案如AST解释器(expr-eval)、预编译Function缓存、Web Workers隔离执行和WASM数学引擎,已在Lodash、Vue、Netfli 阅读详情

在一个没有图片,音乐,flash资源,只有寥寥几个tag的网页的< /body>前,加上如下代码,想看看alert的先后

      $(document).ready(function(){
        alert('ready')
      })
        window.onload=function(){
          alert('window loaded')
        }
        document.body.onload=function(){
          alert('load body')
        }     

结果是先出来了load body,然后才是ready
加了一个外网的iframe,结果则是先ready后load body.
调换了window和body的位置,结果变成了出来window load 和 ready ,body出不来了。

这是一个合理的解释:

虽然$.(document).ready()指的是DomContentsLoaded,但本身jquery文件的加载(刚才是放在head头里的了)也是需要时间的。当DOM节点中没有需要长时间加载的资源时,速度是很快的,ready事件和window.onload,body.onload事件几乎同时,所以可能出现这样的情况,如果在ready事件中写window.onload,还有可能导致window.onload出不来,但如果有需要长时间加载的资源,那就必定存在先ready后onload的时间差。

此外,onload事件不能引用多次,可以把所有代码都放在一个大function里赋给它,但不能写多个window.onload=function()。不会报错,但只会执行最后一个。当body.onload和window.onload共存时,他俩之间也不存在时间差,因此也是谁在后面执行谁。


插一点题外话,jquery3.0之后取消了.load方法,可以用.on()来代替。

//load可以用,而且可以用的就这个,唯一的 
      $(window).on('unload',function(){
          alert('window unloaded')
        })

//unload会被block, 可能是浏览器行为
   $(window).on('unload',function(){
          alert('window unloaded')
        })

//body的load没用,不会报错但是没任何效果
        // $('body').on('unload',function(){
        //   alert('load body')
        // })

参考资料:
Jquery ready 源码分析
jquery $(document).ready() 与window.onload的区别

DOM遍历核心原理与高性能实践指南 DOM(文档对象模型)是浏览器将HTML解析为可编程树形结构的核心抽象,其遍历操作并非简单节点查找,而是涉及节点关系、渲染时序与内存管理的系统性工程实践。理解childNodes与children的区别、nextSibling与nextElementSibling的类型语义、closest()等向上遍历API的底层机制,是构建稳定交互与无障碍适配的基础;而querySelector(:scope)、非递归栈模拟、requestIdleCallback分片等技术,则直接关联FCP首屏性能与主线程响应性。本文聚 阅读详情

相关推荐

WebSocket API 封装实战:TypeScript 类实现 5 大核心功能与自动重连

本文详细介绍了如何使用TypeScript封装WebSocket API,实现自动重连、心跳检测、事件管理等5大核心功能,提升前端实时通信的稳定性和可维护性。通过完整代码示例和典型场景实践,帮助开发者构建生产级WebSocket解决方案。

weixin_33802505的博客 347

jQuery不是过时工具,而是前端演进的底层解剖课

jQuery本质上是JavaScript在浏览器兼容性碎片化时代的抽象实践,它揭示了DOM操作、事件模型与异步通信等核心前端概念的原始形态。其选择器引擎Sizzle、事件委托机制和$.ajax封装,实为对原生API缺陷的系统性补全,体现了抽象层设计中性能与开发效率的经典权衡。理解jQuery,就是理解现代框架中polyfill、shim和适配器模式的起源;掌握其源码逻辑,能显著提升对Vue/React中事件绑定、动态DOM更新及请求管理的底层认知。本文以‘剧场版’结构还原jQuery三阶段演进,聚焦Sizz

世范水晶 1846

Codex Skills安装系统:Web驱动的技能生命周期管理平台

Codex Skills 是面向 AI 编程助手的能力封装单元,其本质是声明式意图契约(YAML 定义)与可验证执行逻辑(JS/Python)的结合体。理解 Skills 的注册原理需深入 Service Worker 指令路由、沙箱隔离与状态快照机制,而‘一键安装’实为三层可信链验证——Git 仓库可信度、YAML Schema 合规性与代码 Ed25519 签名。该机制显著提升技能安全性、可审计性与跨团队复用性,广泛应用于 DevOps 自动化、LLM 工作流编排及企业级 AI 能力治理场景。本文聚焦

weixin_30565199的博客 418

document、body对象的事件

onload页面加载完毕时触发,浏览器是一边下载文档,一边解释执行,可能会出现javascript执行时需要某个还没有加载的元素,如果这样需要把操作的代码放到onload事件中,或者把javascipt放到元素之后 onunload:网页关闭(或者离开)后触发 onbeforeunload:在网页准备关闭或者离开的时候触发 window对象代表当前浏览器对象(使用window对象的时候可以省...

Jack huang 的技术笔记 980

前端面试题汇总

总结了一下之前面试遇到的问题,方便自己也方便他人

annier_11的博客 148

pink老师JS教学体系解密:从语法到工程化实战

JavaScript不仅是编程语言,更是运行在真实浏览器环境中的动态执行系统。理解其核心原理,需跨越语法学习、DOM交互、反爬逆向调试、框架集成四大能力层级。本文围绕JS运行时环境、事件机制、CORS策略、Bootstrap组件劫持、Vue底层JS驱动逻辑等关键技术点展开,结合真实教学资料包结构,解析如何通过沙盒环境、靶场训练与工程化工作流,构建可落地的前端工程能力。特别聚焦‘JS反爬实战’与‘JS深入浅出Vue’两大高频搜索场景,揭示从脚本编写到系统级控制的进阶路径,助力开发者突破切图思维,迈向高阶JS工

weixin_29847829的博客 250

jquery之重写(扩展)$.ajax和$.fn.load等方法详解

前言:         今天做东西,考虑用户最好的体验,要实现界面上异步请求数据的loading效果,功能代码都是别人写完的,大概几十个地方,用的都是jQuery的load方法。咋整啊,总不能挨个去每个方法里面加效果吧,几十个地方呢。思来想去,只能用重写了,嘛也不说了,开干。         作为一名资深小白,之前从未重写过jQuery的方法,依托着度娘,外加又看了看jquery的源码

代码与酒 1万+

安捷伦示波器实战指南:从基础操作到精准触发

本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。

weixin_30839881的博客 135

判断页面关闭的方法 UNLOAD/onbeforeunload

最近一个朋友做在线统计,问我怎么判断用户登陆和离开。获得用户登陆不用说了,大家都知道,判断离开的话就有一点问题了,如果说用户都是按照设计者的规定的范围触发退出事件离开的话那就没什么难度了,但是用户的离开方式多种多样,怎么在用户非法离开的时候既时的判断离开呢?最常见的非法离开就是关闭浏览器了。====================================================

ZetaChow 6401

SGX软硬件栈(二)——硬件指令

硬件指令分为内核权限硬件指令和用户权限硬件指令。内核权限硬件指令指的是指令需要通过内核态下才能访问,缩写是ENCLS。用户权限硬件指令指的是指令用户态下便能访问,缩写是ENCLU。每一个具体的功能指令被称为叶功能,如EADD叶功能,因为叶功能之间的区分是硬件指令(如ENCLS指令:0x 0F 01 CF)的EAX值不同,因此ENCLS指令的EAX在输入时都是用作叶功能号。 内核权限硬件指令-ENCLS 如图2所示,SGX 1代指令中,ENCLS主要用于管理Enclave生命周期等。比如下文将介绍的Enc

小气球归来的博客 2889

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位

本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。

weixin_42524945的博客 1万+

body和document常用的事件

body onload=" alert('docment has onload')" onunload="alert('document has unloaded')"  onbeforeunload="window.event.returnValue = '确实要关闭窗口吗?'">     afwqerf     input type="button" /> body> onload

zhuoyue008的专栏 1473

【DexGraspNet与多指手抓取算法详解】第三章 DexGraspNet数据集构建机理

抓取姿态描述多指手与物体的相对空间关系,包含手掌位姿与手指关节配置。

VectorShift的博客 497

Vue3集成luckysheet实现Excel在线编辑

本文详细介绍了在Vue3项目中集成Luckysheet在线表格组件的完整方案及问题解决过程。主要内容包括: 安全优化方案 提出三种解决裸URL访问漏洞的方案:临时签名过渡方案、Vue3集成原版Luckysheet、迁移Univer新组件,最终选择中长期的Vue3集成方案。 技术实现细节 通过CDN方式引入Luckysheet资源 使用MutationObserver监听实现标题字数限制 事件委托机制处理返回按钮跳转及悬浮提示残留问题 全局资源管理确保组件卸载时完全清理

Mr.小灰狼_随笔 904

STM32实战开发(76):STM32开发无线传感器网络(WSN)完整实现

本文介绍了如何基于STM32开发无线传感器网络,包括硬件选择、通信协议、系统设计和编程实现。通过STM32的强大性能和低功耗特性,我们能够构建高效、可靠的无线传感器网络。无论是Zigbee、LoRa、Wi-Fi还是BLE协议,STM32都能够与多种通信模块进行兼容,满足不同应用的需求。希望这篇文章能帮助您了解无线传感器网络的构建流程,并为您的项目提供有价值的参考。

2201_76125393的博客 1058

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

油猴脚本(Tampermonkey)开发学习笔记

本文是一份油猴脚本(Tampermonkey)开发的学习笔记,内容涵盖从入门到精通的完整知识体系。笔记首先介绍了油猴脚本的基本概念、功能场景与限制,随后详细讲解了开发环境的搭建方法,包括浏览器扩展安装、编辑器选择和项目结构建议。核心部分以"Hello World"示例展开,深入解析了元数据块的配置语法(如@name、@match等匹配规则)和脚本基础结构。此外还预告了后续将探讨的GM API、DOM操作、网络请求、数据存储等高级主题,以及调试技巧和发布流程。

TheAnnoyingDog的博客 449

Dify知识库文档批量下载神器:一键导出所有文件到本地

在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的

羊城迷鹿的博客 3473

JS 面试题

也就是说如果不加inheritAttrs: false父元素引入子元素,然后再子元素上增加的内容,子元素会默认增加到第一个div上,如果有了inheritAttrs: false我可以通过useAttrs()拿到所有父元素给子元素设置项自己手动分配。inheritAttrs 是 Vue 组件的一个选项,控制是否将父组件传递的非 prop 属性自动绑定到组件的根元素上。// 再拿到所有东西:{class: "红色", onClick: 处理函数, "data-test": "1"}// 先说:别自动给我。

d81895606的博客 926

在Simulink中构建永磁同步电机的网络化控制模型,并分析通信网络对系统性能的影响

核心优势通过仿真验证了网络延迟和丢包对PMSM控制性能的影响。提供了改进PI参数或引入自适应控制的解决方案。扩展方向抗干扰控制:结合卡尔曼滤波或滑模控制抑制网络噪声。时间敏感网络(TSN)建模:参考知识库[2]的中断触发方式,实现确定性通信。网络安全仿真:模拟恶意攻击(如数据篡改)对控制系统的威胁。

xiaoheshang_123的博客 167

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Ruby‘s Louvre:中国前端兼容性技术史的活态档案

浏览器兼容性是前端开发的基础能力,其本质是理解不同渲染引擎对Web标准的实现差异与历史演进。从IE6的hasLayout机制到DOMContentLoaded事件原理,再到onpropertychange与input事件的规范博弈,兼容性问题背后是W3C标准落地、厂商私有扩展、Polyfill时间差补偿等多重技术逻辑。掌握原生DOM操作、手写CSS适配、零依赖调试方法,不仅能应对政府/金融类老旧系统维护需求,更能提升对现代框架(如Vue、React)底层行为的判断力。本文聚焦‘Ruby's Louvre’这

diaoqi6581的博客 399

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WebAssembly与PWA:终结安装包时代的新兴应用分发技术

在软件分发领域,传统的安装包模式面临分发效率低、更新体验差等瓶颈。WebAssembly作为一种高性能、安全的二进制指令格式,通过其沙箱环境和跨平台特性,为计算密集型任务提供了接近原生的执行性能。结合渐进式Web应用(PWA)的即时更新和跨平台一致性优势,这些技术正在重塑应用交付方式。它们使得复杂应用能够直接在浏览器中运行,无需本地安装,显著降低了开发者的适配成本和用户的使用门槛。这种“无安装”范式特别适用于工具类、内容消费类应用,正在推动软件分发向更高效、更安全的方向演进。

weixin_34268843的博客 295

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 400

弹出弹窗后,如何禁止底层的body滚动,适用于超长的页面

常见场景 从event target入手 还是直接干body吧 conclusion 常见场景 在许多填写表单的页面中,都会弹出一个选择器,让你在弹窗中选择项目。有时,弹窗本身容纳不下内容,需要让它不断滚动来展示,但因为事件是冒泡的,有时就会造成底部(body 的Z-index肯定是在下面的 )的内容也在滚动。这内外一起滚,就有点尴尬了。 举例,下面两张图里,都有类似的问题。那

凝视深渊 4万+

deepClone, extend, 深克隆对象和Object.assign(ES6)

在看 you might not need jQuery的时候,看到了$.extend函数来拷贝某个对象。测试了一下原文代码,居然复制不到深层的。原代码如下:var deepExtend = function(out) {Object.assign() 方法值能复制可枚举、本身的属性(enumerable and own properties), 它用在引用源上使用get方法,在目标容器上使用set方法,引发了get

凝视深渊 8105
上一篇: jquery中.prop()和.attr()的区别 什么叫布尔型属性 property vs attributes , boolean attributes...
下一篇: 总结:改官网首页遇到的问题(一个端整页滚动,一个端正常滚怎么搞)
十方魔
博客等级 码龄10年 202粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值