window/body/img/iframe 的onload事件

本文探讨了在IE6浏览器中iframe元素的onload事件行为及其与window.onload事件之间的交互问题。文中通过实例展示了当这两种事件同时存在时的具体表现,并提到了使用addEventListener绑定事件时的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在html页面中,只有body,img,iframe这一类标签具有onload事件。

    onload事件表示在当前元素载入完成后发生的事件。其中,window也有onload事件,但是跟body的是同一事件,如果页面上对两者都定义了该事件,只会响应一个。

    iframe上的事件在ie6下有一些bug:

    1.iframe的onload事件跟window.onload事件只能二者取其一,似乎ie把它看作同一个事件了!例如:

window.onload=function(){

    alert("window loaded");

}

var oIframe = document.getElementById("iframe");

oIframe .onload=function(){

    alert("iframe loaded");

}

    这段代码只能响应iframe的事件,如果window.onload事件定义在后则只响应window的onload事件!

    但是如果在iframe标签中定义响应方法则不会发生这种情况:

<iframe src=child.html" onload="alert('iframe loaded')"></iframe>

  这样的代码则能正确执行,window和iframe的onload事件均能正常响应。

  用addEventListener的方式绑定的iframe事件也可以正常运行

     如果是在js中定义的iframe的onload事件,则只有在iframe第一次加载时响应,以后更改iframe的src加载别的页面时都不会再响应了。

  这似乎证明了在js中定义iframe的onload事件实际上定义的是window的onload事件,这样才能解释为何window的事件被覆盖了,

并且只响应一次,因为window确实只加载一次。在Firefox和Chrome中则没有这个问题。

转载于:https://www.cnblogs.com/liaojie970/p/5627647.html

重新问的问题和之前的无关,我发一段代码不要求改原有的逻辑,将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
<script type=“text/javascript”> function visionTreeHandler() { var node = webFXTreeHandler.selected; //如果是文件夹节点,则跳过 if (!node.folder) { var path = getFullPathForNode(node); parent.frames['visionMain'].location = "visionView.jsp?svgfile=" + path; } } function onLoadedFun(){ parent.frames['visionMain'].location = "visionView.jsp?svgfile=主接线图"; } function exitLeftFrame() { // 获取父框架集 var frameset = parent.document.getElementsByTagName('frameset')[0]; // 隐藏左侧框架 frameset.cols = "0,*"; // 将左侧框架的宽度设置为0 } </script><body onload=“javascript:onLoadedFun()” style=“overflow:hidden; background-color:white;”> <div class="left-header"> <span>画面列表</span> <!-- 左侧标题,可自定义 --> <button class="close-btn" onclick="exitLeftFrame()">×</button> <!-- 右上角关闭按钮 --> </div> <%--<button onclick="exitLeftFrame()">退出</button>--%> <div class="divScroll"> <script type="text/javascript"> //"监视页面" var tree = new VisionTree("画面文件", "${pageContext.request.contextPath}", "${pageContext.request.contextPath}/scripts/xtree", "javascript:visionTreeHandler();"); </script> </div> </body><frameset name=“visionFrame” cols=“10%,*” framespacing=“1” border=“3px”> <frame src=“visionLeft.jsp” id=“visionLeft” name=“visionLeft” bordercolor=“#0066FF” frameborder=“1” marginwidth=“0” marginheight=“0”> <frame src=“about:blank” id=“visionMain” name=“visionMain” marginheight=“0” > <noframes> <body>对不起!您的浏览器不支持框架!</body> </noframes> </frameset> 修改成<div>实现
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值