iframe的onload事件监听

简介:
iframe的onload事件监听比较麻烦,浏览器注册事件监听的方式也不一样,下面是一个通用的监听方式。
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
        <title></title> 
</head> 
<body> 
<div id="cnt"></div> 
<input name="bt" type="button" value="设置IFrame内容" 
</body> 
</html> 
<script type='text/javascript'> 
        //添加两个 
        function doAction1() { 
                alert(" 
        } 
        function doAction2() { 
                alert(" 
        } 

        function doIt() { 

                //删除所有的ifream内容 
                var div = document.getElementById("cnt"); 
                var arrifm = div.getElementsByTagName("iframe"); 
                if (arrifm.length != 0) { 
                        var x = div.removeChild(arrifm[0]); 
                        alert("清除成功!") 
                } 

                //添加新的ifream内容 
                var iframe = document.createElement("iframe"); 
                iframe.src = "b.html"; 

                //为ifream的 
                if (iframe.attachEvent) { 
                        iframe.attachEvent(" { 
                                doAction1(); 
                                alert("Local iframe is now loaded 1."); 
                        }); 
                } else { 
                        iframe.onload = function() { 
                                this.doAction2(); 
                                alert("Local iframe is now loaded 2."); 
                        } 
                } 

                //追加ifream元素 
                div.appendChild(iframe); 
                //弹出ifream的HTML代码 
//                alert(div.innerHTML); 
        } 
</script>
 
上面的事件监听写成下面的也行:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
        <title></title> 
</head> 
<body> 
<div id="cnt"></div> 
<input name="bt" type="button" value="设置IFrame内容" 
</body> 
</html> 
<script type='text/javascript'> 
        //添加两个 
        function doAction1() { 
                alert(" 
        } 
        function doAction2() { 
                alert(" 
        } 

        function doIt() { 

                //删除所有的ifream内容 
                var div = document.getElementById("cnt"); 
                var arrifm = div.getElementsByTagName("iframe"); 
                if (arrifm.length != 0) { 
                        var x = div.removeChild(arrifm[0]); 
                        alert("清除成功!") 
                } 

                //添加新的ifream内容 
                var iframe = document.createElement("iframe"); 
                iframe.src = "b.html"; 

                //为ifream的 
                if (iframe.attachEvent) { 
                        iframe.attachEvent(" doAction1); 
                } else { 
                        iframe.onload = doAction2 
                } 

                //追加ifream元素 
                div.appendChild(iframe); 
                //弹出ifream的HTML代码 
//                alert(div.innerHTML); 
        } 
</script>
 
但是下面这种方式不行:
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
        <title></title> 
</head> 
<body> 
<div id="cnt"></div> 
<input name="bt" type="button" value="设置IFrame内容" onclick="doIt()"
</body> 
</html> 
<script type='text/javascript'> 
        function aa() { 
                alert("aaaaaaaaa"); 
        } 
        function doIt() { 

                //删除所有的ifream内容 
                var div = document.getElementById("cnt"); 
                var arrifm = div.getElementsByTagName("iframe"); 
                if (arrifm.length != 0) { 
                        var x = div.removeChild(arrifm[0]); 
                        alert("清除成功!"
                } 

                //添加新的ifream内容 
                var iframe = document.createElement("iframe"); 
                iframe.src = "b.html"

                //添加两个 
                doIt.prototype.doAction1 = function() { 
                        alert("onload1"); 
                        bb(); 
                }; 
                doIt.prototype.doAction2 = function() { 
                        alert("onload2"); 
                        bb(); 
                }; 

                // 下面的方式不行 
                if (iframe.attachEvent) { 
                        iframe.attachEvent("onload"this.doAction1()); 
                } else { 
                        iframe.onload = this.doAction2(); 
                } 

                // 下面的方式不行 
//                if (iframe.addEventListener) { 
//                        iframe.addEventListener(' this.doAction1, false); 
//                } else if (iframe.attachEvent) { 
//                        iframe.onload = this.doAction2; 
//                } 


                //追加ifream元素 
                div.appendChild(iframe); 
                //弹出ifream的HTML代码 
                alert(div.innerHTML); 
        } 

</script>
 
注意:父窗口不能调用ifream内的js方法。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/481054,如需转载请自行联系原作者
相关文章
|
前端开发
如何用CSS实现不规则形状的背景
在设计网页时,有时需要用到不规则形状的背景。这种背景可以为网页带来更加生动的效果。在这篇文章中,我们将探讨如何用CSS实现不规则形状的背景。
1409 0
|
小程序
uni-app:网络状态监测之onNetworkStatusChange与getNetworkType的区别与应用
1、在实际项目开发中,难免涉及到监测网络,下面来具体了解下小程序两种监测网络的方法。 2、这里配置的是 uniapp,微信小程序把 uni. 换成 wx. 即可。
2414 0
uni-app:网络状态监测之onNetworkStatusChange与getNetworkType的区别与应用
|
1月前
|
JavaScript 前端开发 IDE
前端开发项目必备VSCode代码定位神器——code-inspector-plugin
本文介绍了一款由快手前端团队开发的高效开发工具——code-inspector-plugin。该插件可实现点击页面DOM元素,自动定位至IDE中对应源码行,支持Vue、React等主流框架及Webpack、Vite等多种构建工具,无侵入、易集成,大幅提升前端开发调试效率。
264 0
|
7月前
|
数据采集 XML 监控
Google Search Console 做SEO分析之“已发现未编入” 与 “已抓取未编入” 有什么区别?
在 Google Search Console (GSC) 中,“已发现 - 尚未编入索引”(Discovered - currently not indexed) 和 “已抓取 - 尚未编入索引”(Crawled - currently not indexed) 是两种不同的状态,如果你的站点也有这两种状态就需要注意优化了。
383 0
Vue2时间轴(横向)
该横向时间轴组件 `HorizonTimeLine` 可自定义时间轴数据 (`timelineData`) 和初始选中年份 (`activeYear`)。通过点击不同的年份,可以改变当前激活的年份,并有相应的视觉反馈。该组件支持均匀自适应排列,且易于在其他页面中引入和使用。
1309 0
Vue2时间轴(横向)
|
Web App开发 编解码 vr&ar
Deepseek解读 | UE像素流送与实时云渲染技术的差别
为了实现UE引擎开发的3D/XR程序推流,开发者通常使用像素流送(Pixel Streaming)技术。它通过WebRTC协议将服务器端渲染的画面传输到客户端,适用于短时、少并发场景。然而,在项目落地阶段,其局限性显现,实时云渲染方案成为更好的选择。Deepseek分析表明,实时云渲染具备高性能分布式渲染、低延迟传输、多平台支持等优势,特别适合高复杂度场景和大规模应用。Paraverse平行云的LarkXR产品,作为领先的实时云渲染解决方案,提供高质量、低延迟的渲染体验,支持多种3D引擎和XR内容格式,具备弹性扩展和成本优化等特点,广泛应用于元宇宙、虚拟仿真等领域。
|
安全 Linux Shell
Kali渗透测试:使用Metasploit对Web应用的攻击
Kali渗透测试:使用Metasploit对Web应用的攻击
470 4
|
Ubuntu 数据安全/隐私保护 虚拟化
Ubuntu和Windows之间文件无损互传
Ubuntu和Windows之间文件无损互传
1418 0
|
监控 Python
Python中精通异常日志记录
Python中精通异常日志记录
234 0
|
Web App开发 JavaScript Android开发
微信小程序之内嵌网页(webview)
微信小程序提供了新的开放能力!它终于开放了在小程序中内嵌HTML页面的功能!从微信小程序基础库1.6.4开始,我们就可以在小程序内放置一个组件来链接我们的HTML页面了。
3361 0