• iframe框架同源下的数据调用
  • iframe框架非同源下的数据传输

一、iframe框架同源下的数据调用

1.父窗口向子窗口获取数据

 //html1父级窗口
<iframe src="./2.html"></iframe>
<script type="text/javascript">
var oIframe = document.getElementsByTagName('iframe')[0];
oIframe.onload = function(){
console.log(oIframe.contentWindow.a);//打印出:22a
}
</script>
//html2子级窗口
<script type="text/javascript">
var a = "22a";
</script>

2.子窗口向父窗口获取数据

 //父级窗口
<iframe src="./2.html"></iframe>
<script type="text/javascript">
var a = "11a";
</script>
//子级窗口
<script type="text/javascript">
var a = "22a";
console.log(window.parent.a);//11a
</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值向子窗口传送数据:父窗口代码==》

 //父级窗口
<iframe src="http://xxx.cn/iframe/2.html"></iframe>
<script type="text/javascript">
//实现每点击一次修改一次内联框架的hash值
var oIframe = document.getElementsByTagName('iframe')[0];
var a = 1;
var oSrc = oIframe.src;
document.onclick = function(){
oIframe.src = oSrc + "#" + a;
a++;
}
</script>

子窗口代码==》

 //子窗口
<script type="text/javascript">
//通过定时器时时获取父窗口修改的hash值(注意没修改时不获取)
var ohash = window.hash;//获取初始hash值
setInterval(function(){
if(ohash != window.location.hash){//判断时时hash值是否等于上一次的
console.log(window.location.hash);
ohash = window.location.hash;//将修改的hash值赋给ohash
}
},10);
</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>

计算机网络之iframe内联框架跨域的更多相关文章

  1. 第48天学习打卡(HTML 行内元素和块元素 列表 表格 视频和音频 页面结构分析 iframe内联框架 表单语法 )

    行内元素和块元素 块元素 ​ 无论内容多少,该元素独占一行 ​ (p.h1-h6) 行内元素 ​ 内容撑开宽度,左右都是行内元素的可以排在一行 ​ (a.strong.em...) 列表 什么是列表 ...

  2. 重写iframe内联框架中的内容

    重写iframe内联框架中的内容,不使用src指向页面url,主动写入HTML代码: var ifr = document.getElementById("CMBC-certificatio ...

  3. __x__(14)0906第三天__<iframe> 内联框架 引入有一个外部html页面

    在现实开发中,不推荐使用内联框架,因为<iframe></iframe>中的内容不会被搜索引擎检索. 在特殊情况中,如内网项目,不用放在互联网上时,可以使用<iframe ...

  4. Iframe内联框架

    iframe:内联框架标签,用于在网页中任意的位置嵌入另一个网页 <iframe src="url地址"> </iframe> iframe标签的常用属性 ...

  5. iframe与主框架跨域相互访问方法

    iframe 与主框架相互访问方法  http://blog.csdn.net/fdipzone/article/details/17619673/ 1.同域相互访问 假设A.html 与 b.htm ...

  6. iframe与主框架跨域相互访问方法【转】

    转自:http://blog.csdn.net/fdipzone/article/details/17619673 1.同域相互访问 假设A.html 与 b.html domain都是localho ...

  7. iframe 内联框架

    Iframe - 设置高度和宽度 height 和 width 属性用于规定 iframe 的高度和宽度. 属性值的默认单位是像素,但也可以用百分比来设定(比如 "80%"). 实 ...

  8. iframe内嵌页面——跨域通讯

      <template> <div class="act-form"> <iframe :src="src" ref=" ...

  9. 如何利用JQuery获取iframe内联框架对象?

    parent.$("#iframeID").get(0).contentWindow; 父.$("选择器").get(0).contentWindow; get ...

随机推荐

  1. 【已采纳】最快获取package和activity的方式

    意外找到一个本人自认为是最快获取package和activity的方法,欢迎来辩! 用adb命令快速查看某应用appPackage及appActivity的方法(前提是需要用数据线连接真机\模拟器也可 ...

  2. SQL Server 取日期时间格式 日期与字符串之间的转换

    SQL Server 取日期时间部分   在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate()  用DateName()就可以获得相应的 ...

  3. http面试准备

    从http的角度深入分析一次web请求: 1.在浏览器输入一个url地址如www.baidu.com 2.请求DNS把这个域名解析成对应的IP地址(DNS域名解析过程看上篇博客) 3.根据这个IP地址 ...

  4. 好程序员web前端分享javascript关联数组用法总结

    好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...

  5. python open 函数的读写追加

  6. 通俗理解ZooKeeper是如何保证数据一致性的

    https://blog.csdn.net/liuhaiabc/article/details/70771322 https://blog.csdn.net/zhaoyangjian724/artic ...

  7. RabbitMQ之安装

    RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ就扮演着邮箱.邮局以 ...

  8. K3CLOUDJOBPROCESS每分钟重启

    1.进入服务,找到k3cloudjobprocess 2.设置每分钟重启

  9. SpringBoot+AOP整合

    SpringBoot+AOP整合 https://blog.csdn.net/lmb55/article/details/82470388 https://www.cnblogs.com/onlyma ...

  10. Java中的String,StringBuilder,StringBuffer

    String被final修饰,不可变,每次更改其实是重新创建了一个对象.StringBuilder,StringBuffer是可变的. StringBuffer是线程安全的,StringBuilder ...