2019独角兽企业重金招聘Python工程师标准>>> hot3.png

iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同。

一、同域下父子页面的通信

父页面parent.html

<html>
<head><script type="text/javascript">function say(){alert("parent.html");}function callChild(){myFrame.window.say();myFrame.window.document.getElementById("button").value="调用结束";}</script>
</head>
<body><input id="button" type="button" value="调用child.html中的函数say()" οnclick="callChild()"/><iframe name="myFrame" src="child.html"></iframe>
</body>
</html>

子页面child.html

<html>
<head><script type="text/javascript">function say(){alert("child.html");}function callParent(){parent.say();parent.window.document.getElementById("button").value="调用结束";}</script>
</head>
<body><input id="button" type="button" value="调用parent.html中的say()函数" οnclick="callParent()"/>
</body>
</html>

方法调用

父页面调用子页面方法:FrameName.window.childMethod();

子页面调用父页面方法:parent.window.parentMethod();

DOM元素访问

获取到页面的window.document对象后,即可访问DOM元素

注意事项

要确保在iframe加载完成后再进行操作,如果iframe还未加载完成就开始调用里面的方法或变量,会产生错误。判断iframe是否加载完成有两种方法:

1. iframe上用onload事件

2. 用document.readyState=="complete"来判断

二、跨域父子页面通信方法

如果iframe所链接的是外部页面,因为安全机制就不能使用同域名下的通信方式了。

父页面向子页面传递数据

实现的技巧是利用location对象的hash值,通过它传递通信数据。在父页面设置iframe的src后面多加个data字符串,然后在子页面中通过某种方式能即时的获取到这儿的data就可以了,例如:

1. 在子页面中通过setInterval方法设置定时器,监听location.href的变化即可获得上面的data信息

2. 然后子页面根据这个data信息进行相应的逻辑处理

子页面向父页面传递数据

实现技巧就是利用一个代理iframe,它嵌入到子页面中,并且和父页面必须保持是同域,然后通过它充分利用上面第一种通信方式的实现原理就把子页面的数据传递给代理iframe,然后由于代理的iframe和主页面是同域的,所以主页面就可以利用同域的方式获取到这些数据。使用 window.top或者window.parent.parent获取浏览器最顶层window对象的引用。

转载于:https://my.oschina.net/u/617626/blog/692739

【转】js之iframe子页面与父页面通信相关推荐

  1. js之iframe子页面与父页面通信

    一.同域下父子页面之间的通信 原生js写法 父页面访问子页面 var children = document.getElementById("childframe").conten ...

  2. iframe子页面与父页面元素的访问以及js变量的访问

    后台管理系统嵌套了很多iframe页面,想要取得父页面的元素,需要特殊的写法,总是记不住,写下来方便寻找 // eg:iframe页面找父页面的 #nav $('#nav',parent.docume ...

  3. iframe 覆盖父页面_一次iframe子页面与父页面的通信

    事件回顾: 收到需求,说是要在别人的系统里嵌入目前由我维护的系统,嵌入的逻辑不多,只有一个创建流程. 刚开始觉得没什么,不就是你改改,我改改,你给我url加个参数,我知道是你调用,修改下页面balab ...

  4. html中iframe子页面与父页面元素的访问以及js变量的访问

    1.子页面访问父页面元素 parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素 document.getEleme ...

  5. iframe子页面与父页面元素的访问以及js变量的访问[zhuan]

    https://www.cnblogs.com/Capricorn-HCL/articles/4216302.html

  6. js对iframe内外(父子)页面进行操作

    怎么对iframe进行操作,1.在iframe里面控制iframe外面的js代码.2.在父框架对子iframe进行操作. 获取iframe里的内容 主要的两个API就是contentWindow,和c ...

  7. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  8. JS备忘--子父页面获取元素属性、显示时间,iframe之间互相调用函数

    //页面加载完成后执行$(function() { getHW();});//当用户改变浏览器大小改变时触发$(window).resize(function() { setHW(); });//每5 ...

  9. js取iframe 上级页面_原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法...

    用原生js在父页面获取iframe子页面的元素,以及在子页面获取父页面元素,这是平时经常会用到的方法,这里写一个例子来总结下: 1.父页面(demo.html),在父页面修改子页面div的背景色为灰色 ...

最新文章

  1. 神经网络基础:(3)神经网络整体架构
  2. hdu2544最短路
  3. undefined reference to `std::cout'等错误
  4. 权限列表(包字典)递归成树状结构
  5. 20 位行业专家共话选型经验,CSDN「选型智囊团高端研讨会」圆满落幕!
  6. SharePoint 2010必备组件
  7. carrot2 Workbench org.apache.http.client.HttpResponseException: Not Found 以及其他类找不到错误的解决办法
  8. 利用MEGA做序列比对
  9. 如何使用微信编辑器排版微信公众号内容?
  10. 学术报告学习总结2(2021.6.24)
  11. ksh 命令退出状态
  12. java计算器gui(有三角函数,幂运算)
  13. 有向图加边成强连通图(tarjan缩点)
  14. 每天五分钟机器学习:随着算法迭代次数动态调整学习率
  15. 总账库存科目明细追溯
  16. SpringBoot2.6.x集成swagger: Failed to start bean ‘documentationPluginsBootstrapper问题解决
  17. Spark+Scala建设数仓和数据分析
  18. 用baas实现文章管理功能的例子
  19. Linux - 如何生成configure文件
  20. PyCharm使用教程:选择性忽略 PEP8 警告

热门文章

  1. boost::contract模块实现loop的测试程序
  2. VTK:可视化之LoopShrink
  3. VTK:PolyData之WarpSurface
  4. VTK:PolyData之CenterOfMass
  5. OpenCV使用不同的决策树decision trees的实例(附完整代码)
  6. QML从右到左的用户界面
  7. Qt CMake变量参考
  8. Qt Creator Qt Quick用户界面表单ui-forms
  9. c语言 static 关键字的作用
  10. QT的QDesignerPropertySheetExtension类的使用