window.onload函数在Firefox、Edge正常运行但Chrome中不生效问题求助
问题原因分析
- 核心时序冲突:
jQuery(function($) { ... })是DOMContentLoaded事件的简写,触发时机是页面DOM结构解析完成就执行,不需要等样式、图片等所有资源加载完毕。而window.onload是等所有页面资源加载完毕才触发。Chrome的页面加载执行速度通常更快,当DOMContentLoaded触发时,window.onload事件已经执行完成了,你此时才给window.onload赋值回调函数,自然不会再被调用。Firefox、Edge的当前环境加载时序刚好和Chrome不同,所以刚好能触发。 - 潜在绑定冲突:直接给
window.onload赋值属于覆盖式绑定,如果页面其他地方也有对window.onload的赋值,会把你写的回调直接覆盖,导致不生效。
修复方案
直接去掉jQuery DOMReady的包裹,或者改用jQuery的事件绑定方式绑定load事件,避免覆盖和时序问题:
// 方案1:绑定load事件,等待所有资源加载完成后执行 jQuery(window).on('load', function(){ setTimeout(function(){ jQuery("#loader").hide(); jQuery("#cont").show(); jQuery("#cont > div").hide(); jQuery("#game-start31").show(); }, 3000); });
如果你的逻辑不需要等所有资源加载完,只需要等DOM解析完就执行,可以直接去掉window.onload的包裹:
// 方案2:DOM就绪就执行,不需要等待资源加载 jQuery(function($){ setTimeout(function(){ $("#loader").hide(); $("#cont").show(); $("#cont > div").hide(); $("#game-start31").show(); }, 3000); });
内容的提问来源于stack exchange,提问作者Jituu
相关产品推荐
相关产品推荐

