计算机网络之iframe内联框架跨域
- iframe框架同源下的数据调用
- iframe框架非同源下的数据传输
一、iframe框架同源下的数据调用
1.父窗口向子窗口获取数据
1 //html1父级窗口 2 <iframe src="./2.html"></iframe> 3 <script type="text/javascript"> 4 var oIframe = document.getElementsByTagName('iframe')[0]; 5 oIframe.onload = function(){ 6 console.log(oIframe.contentWindow.a);//打印出:22a 7 } 8 </script> 9 //html2子级窗口 10 <script type="text/javascript"> 11 var a = "22a"; 12 </script>
2.子窗口向父窗口获取数据
1 //父级窗口 2 <iframe src="./2.html"></iframe> 3 <script type="text/javascript"> 4 var a = "11a"; 5 </script> 6 //子级窗口 7 <script type="text/javascript"> 8 var a = "22a"; 9 console.log(window.parent.a);//11a 10 </script>
注:
1.获取iframe内的window又多种方法,示例中采用获取iframe标签再通过contentWindow属性获取,是一种通用的写法。
标准浏览器:window.frames['iframe的name']。采用window上的frame属性然后通过内联框架的name属性获取。
IE专用:document.iframes[‘iframe的name’].contentWindow。
docuemtn.iframes[i].contentWindow。(i表示索引)
2.获取父级窗口的对象:window.parent
3.获取顶级窗口的对象:window.top
4.获取属于自己的窗口对象:window.self
二、iframe框架非同源下的数据传输(跨域传输)
1.通过hash值向子窗口传送数据:父窗口代码==》
1 //父级窗口 2 <iframe src="http://xxx.cn/iframe/2.html"></iframe> 3 <script type="text/javascript"> 4 //实现每点击一次修改一次内联框架的hash值 5 var oIframe = document.getElementsByTagName('iframe')[0]; 6 var a = 1; 7 var oSrc = oIframe.src; 8 document.onclick = function(){ 9 oIframe.src = oSrc + "#" + a; 10 a++; 11 } 12 </script>
子窗口代码==》
1 //子窗口 2 <script type="text/javascript"> 3 //通过定时器时时获取父窗口修改的hash值(注意没修改时不获取) 4 var ohash = window.hash;//获取初始hash值 5 setInterval(function(){ 6 if(ohash != window.location.hash){//判断时时hash值是否等于上一次的 7 console.log(window.location.hash); 8 ohash = window.location.hash;//将修改的hash值赋给ohash 9 } 10 },10); 11 </script>
这种做法是可以实现时时的跨域内联框架的数据传输,但是定时器的性能损耗太大,并不适合。而且这种方法也仅仅适应父级窗口向子级窗口传输数据。
2.通过window.name实现跨域内联框架数据传输(需要借助一个同源的页面),解决子窗口向父级窗口传输数据:
//子窗口有一个变量 var a = 1; window.name = a;
在非同源的父级窗口(跨域获取子窗口变量的值的方法)
<iframe src="http:xxx.cn\iframe\2.html"></iframe> <script type="text/javascript"> //实现每点击一次修改一次内联框架的hash值 var oIframe = document.getElementsByTagName('iframe')[0]; oIframe.src = "3.html";//3是一个同源同源的页面 oIframe.onload = function(){ console.log(oIframe.contentWindow.name); } </script>
——生命自会找到蓬勃之路。
分类:
前端网络及计算机网络和通讯协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律