IE11中弹窗的jQuery $(window).on('load')事件不生效问题求助
解决IE11中弹窗load事件未触发的问题
我之前也踩过IE11这个兼容性坑,jQuery绑定弹窗的load事件在IE里确实容易失效,这里给你两个不需要修改弹窗页面的可行修复方案:
方案一:改用原生window.onload事件绑定
IE11对jQuery处理window对象的事件绑定支持不够友好,直接给弹窗的window对象绑定原生onload事件反而更可靠:
var popup = window.open("popupwindow.html", "popup", extraParams); // 绑定原生onload事件 popup.onload = function() { popup.document.getElementById("getData").innerHTML = data; };
这个方案绕开了jQuery的事件封装逻辑,直接使用浏览器原生的事件绑定,IE11对原生window.onload的支持是稳定的。
方案二:轮询检查弹窗加载状态
如果方案一偶尔还是出现绑定滞后的问题(比如弹窗加载速度极快),可以用轮询的方式检测弹窗的加载完成状态:
var popup = window.open("popupwindow.html", "popup", extraParams); var checkPopupLoaded = setInterval(function() { try { // 尝试访问弹窗document,若readyState为complete则说明加载完成 if (popup.document && popup.document.readyState === "complete") { popup.document.getElementById("getData").innerHTML = data; clearInterval(checkPopupLoaded); // 停止轮询 } } catch(e) { // 弹窗未加载完成时访问document会抛出异常,直接忽略即可 } }, 50); // 每50毫秒检查一次
这里的try-catch是为了处理弹窗加载过程中,主页面访问其document时可能出现的权限异常,捕获后继续轮询直到加载完成。
为什么原jQuery方案失效?
IE11中,jQuery的$(popup).on('load')在处理window对象的事件绑定时有逻辑差异,导致事件无法正确触发。而原生绑定或轮询的方式,能直接避开这个兼容性陷阱。
内容的提问来源于stack exchange,提问作者tejas
相关产品推荐
相关产品推荐

