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

本文探讨了在不同资源加载条件下,jQuery的$(document).ready()与window.onload及body.onload事件触发的先后顺序。揭示了资源加载对事件触发时机的影响,并解释了重复定义onload事件的行为。

在一个没有图片,音乐,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,jqueryheadDOMreadywindow.onload,body.onloadreadywindow.onloadwindow.onloadreadyonload

onloadfunctionwindow.onload=function()body.onloadwindow.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的区别

重新问的问题和之前的无关,我发一段代码不要求改原有的逻辑,将jquery放在 window.onload = () => {这个方法里面执行jquery执行完返结果了再执行window.onload = () => {后续的代码;var objectId = '<%=objectId%>'; var docname = '<%=docname%>'; var rootPath = '<%=rootPath%>'; var viewoffice = rootPath + '/viewoffice?objectId='+objectId; const dataJson; function fetchJsonFromServlet() { debugger; $.ajax({ url: rootPath + '/officedata?objectId='+objectId, // 替换为您的Servlet路径 type: 'post', dataType: 'json', // 声明期望JSON响应 success: function(response) { // 2. 处理成功响应 console.log('完整响应数据:', response); dataJson = response; }, error: function(xhr) { // 5. 错误处理 console.error('请求失败:', xhr.status, xhr.statusText); alert(`请求失败: ${xhr.status} ${xhr.statusText}`); } }); }; document.addEventListener('DOMContentLoaded', fetchJsonFromServlet); const decodeOnce = decodeURIComponent(docname); const fullyDecoded = decodeURIComponent(decodeOnce); // 要么直接编辑 // 要么先只读 再编辑。 window.onload = () => { window.addEventListener( "message", (e) => { // 子界面已经加载完成 if (e.data === "emanBeeboxLoadFinished") { console.log("父界面,收到数据,准备发送数据===>"); const iframeWindow = document.getElementById('embedPageIframeDom').contentWindow; // 传递office初始化全量参数和默认的参数。 const officeParamsObj = { type: "init", data: dataJson } console.log("父界面准备发送成功===>"); iframeWindow.postMessage(officeParamsObj, "*"); } }, false ); }
06-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值