`
yehengxy
  • 浏览: 11041 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[【转】嵌入式iframe子页面与父页面js通信方式

 
阅读更多

iframe框架中的页面与主页面之间的通信方式根据iframe中src属性是同域链接还是跨域链接,有明显不同的通信方式,同域下的数据交换和DOM元素互访就简单的多了,而跨域的则需要一些巧妙的方式来实现通信。

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

父页面 parent.html

  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. function say() {
  5. alert("parent.html------>I'm at parent.html");
  6. }
  7. function callChild()
  8. {
  9. //document.frames["myFrame"].window.say();//只适用于ie浏览器
  10. myFrame.window.say();
  11. myFrame.window.document.getElementById("button").value="我变了";
  12. }
  13. </script>
  14. </head>
  15. <body>
  16. <input type=button value="调用child.html中的函数say()" onclick="callChild()">
  17. <iframe name="myFrame" src="child.html"></iframe>
  18. </body>
  19. </html>

子页面 child.html

  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. function say()
  5. {
  6. alert("child.html--->I'm at child.html");
  7. }
  8. function callParent() {
  9. parent.say();
  10. parent.window.document.getElementsByName("myFrame")[0].style.height="100px";
  11. }
  12. </script>
  13. </head>
  14. <body>
  15. <input id="button" type=button value="调用parent.html中的say()函数" onclick="callParent()">
  16. </body>
  17. </html>

方法调用

如上面示例所示父页面调用子页面的方法可通过:FrameName.window.childMethod();(这种方式兼容各种浏览器)
子页面调用父页面的方法:parent.window.parentMethod();

DOM元素访问

根据FrameName.window得到了子窗口对象之后,再访问其中的DOM元素就跟访问同一页面中的DOM元素没区别了都可以通过document.getElementById(),document.getElementsByName()[index]。如:parent.window.document.getElementsByName("myFrame")[0],myFrame.window.document.getElementById("button")其中的window都是可以省略的。

注意事项

要确保在Iframe加载完成后再进行操作,如果Iframe还未加载完成就开始调用里面的方法或变量,无疑会产生错误。判断Iframe是否加载完毕有两种方法:
1.在Iframe上用onload事件;
2.用document.readyState=="complete"来判断

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

如果iframe所链接的是外部页面,因为安全机制则不能使用同域名下的通信方式了。在《SNS平台与第三方APP的JS通信实现》中提供易于且具有通用性的通信方式。

父页面向子页面传递数据

实现的技巧就是利用 location 对象的 hash 值,通过它传递通信数据,我们只需要在父页面设置 iframe的 src 后面多加个#data 字符串(data就是你要传递的数据),然后在 子页面 中通过某种方式能即时的获取到这儿 data 就可以了,其实常用的一种方式就是:
1. 在 子页面 中通过 setInterval 方法设置定时器, 监听 location.href 的变化即可获得上面的 data 信息
2. 然后 子页面 就能根据这个 data 信息进行相应的逻辑处理。

子页面向父页面传递数据

实现的技巧就是利用一个代理 Iframe C,它嵌入到 子页面中,并且和父页面必须保持是同域,然后我们通过它充分利用上面第一种通信方式的实现原理就能把 子页面的数据传递给 iframeC,接下来的问题就是怎么让iframeC把数据传递给主页面A ,因为,iframeC 和主页面是同域的,所以它们之间传递数据就变得简单多了,属于同域名下的通信问题了,如前面所讨论的,在这里的可以使用一个经常使用的属性 window.top (也可以使用window.parent.parent),它返回对载入浏览器得最顶层 window 对象的引用,这样我们就能直接条用父页面中方法啦。

参考:

1.《SNS平台与第三方APP的JS通信实现》作者:Springwang。

2.iframe父子窗口间js方法调用 作者:moreorless。

3.IFrame问题汇总作者:dengwf

其它资料:
jquery 父窗口 子窗口 相关操作

分享到:
评论

相关推荐

    嵌入式iframe子页面与父页面js通信的方法

    本文实例讲述了嵌入式iframe子页面与父页面js通信的方法。分享给大家供大家参考。具体分析如下: iframe框架中的页面与主页面之间的通信方式根据iframe中src属性是同域链接还是跨域链接,有明显不同的通信方式,同域...

    iframe与父页面传值(方法互调)

    首先,我们可以通过JavaScript的DOM(Document Object Model)接口来实现`iframe`与父页面之间的通信。在`iframe`内的页面,我们可以使用`parent`对象来访问父页面的全局变量和函数。例如,如果在`iframe`内想要调用...

    iframe与父页面传值

    `iframe`与父页面之间的通信是前端开发中的一个重要知识点,它涉及到跨域安全策略、JavaScript编程以及DOM操作等多个方面。 一、`iframe`的基本使用 在HTML中,`&lt;iframe&gt;`标签用于插入一个内联框架。基本语法如下:...

    同一父页面的一个子页面刷新另一个子页面

    "同一父页面的一个子页面刷新另一个子页面"这个话题聚焦于如何在不重新加载整个父页面的情况下,仅刷新其中一个`iframe`内的子页面。这种技术在提升用户体验、节省网络资源等方面具有显著优势,尤其是在需要动态更新...

    iframe自适应子页面内容高度

    另外,`iframe.js`文件可能是用来辅助实现上述功能的JavaScript代码,比如包含了一些自定义的`resizeIframe`函数或跨域通信的逻辑。在实际项目中,我们需要结合这个文件的内容来完善`iframe`高度自适应的实现。 ...

    iframe兄弟页面相互调用

    在多页面交互的场景下,`iframe`中的子页面与父页面以及与其他兄弟`iframe`之间的通信就显得尤为重要。本文将详细讲解如何实现`iframe`兄弟页面之间的相互调用。 首先,理解`iframe`的结构是关键。一个`iframe`元素...

    iframe子页面获取父页面元素的方法

    当涉及到跨框架通信时,即从`iframe`子页面与父页面交互,就需要了解如何获取和操作彼此的元素。本文将详细讲解在`iframe`子页面获取父页面元素的方法。 首先,我们需要明白`iframe`中的`window`对象和`document`...

    获取iframe子网页的Height

    它允许开发者将不同的页面或应用整合到同一个页面上,提供了一种灵活的布局和内容分发方式。然而,由于浏览器的实现差异,获取`iframe`中的子网页高度可能会遇到一些挑战,特别是在处理不同浏览器兼容性问题时。本篇...

    iframe和父窗口通讯实例

    而关于`iframe`与父窗口之间的通信,是Web开发中的一个重要概念,它允许两个独立的上下文之间进行数据交换,即`iframe`内容与包含它的父页面进行互动。 在`iframe`和父窗口通信的过程中,主要涉及以下几个知识点: ...

    JS父页面与子页面相互传值方法

    在多页面应用或者嵌入式框架(如iframe)中,经常需要进行父页面与子页面之间的数据交换。下面将详细介绍如何在不同场景下使用JS实现这种传值。 一、子页面是父页面通过`window.open`弹出的情况 当子页面是通过`...

    js 实现iframe 之间传值

    当`iframe`和父页面同源时,可以使用`window.parent`访问父窗口,而`window.frames`可以访问子`iframe`。例如: ```javascript // 父页面 window.frames['myIframe'].document.getElementById('targetElement')...

    关于Iframe父页面与子页面之间的相互调用

    当涉及到Iframe时,有时我们需要在父页面与子页面之间进行交互,如调用各自的方法或访问数据。本文将详细探讨如何实现Iframe父页面与子页面之间的相互调用。 首先,理解window对象是关键。在浏览器中,每一个HTML...

    iframe 内的bootstrap模态框证照父页面

    此外,需要注意的是,`iframe`需要与父页面在同一域名下或者都支持CORS跨域请求,否则JavaScript代码可能无法访问到父页面的DOM元素。如果`iframe`加载的页面和父页面不在同一个域,那么你需要寻找其他解决方案,...

    使用Iframe实现TAB页面切换

    下面将详细探讨如何使用Iframe实现TAB页面切换,以及与之相关的知识点。 首先,理解Iframe的基本结构: ```html &lt;iframe src="http://example.com" width="400" height="300"&gt;&lt;/iframe&gt; ``` `src`属性指定要加载的...

    iframe自适应高度js demo

    然而,需要注意的是,由于同源策略的限制,如果`iframe`加载的页面与父页面不在同一个域下,我们无法直接访问`iframe`的内容。在这种情况下,可以尝试使用`postMessage`和`message`事件进行跨域通信,让`iframe`内部...

    iframe高度随子页高度变化

    3. **跨域通信**:如果`iframe`加载的页面与父页面不同源,我们可以利用`window.postMessage`来进行通信。`child.html`中的代码发送消息: ```javascript window.parent.postMessage({action: 'resize', height: ...

    捕捉IFrame SRC改变事件

    - **通信机制**:使用`postMessage` API可以实现主页面与`&lt;iframe&gt;`之间跨域的安全通信。 - **性能优化**:对于动态加载的`&lt;iframe&gt;`内容,可以考虑使用懒加载技术减少页面的初始加载时间。 综上所述,通过使用`...

    postmessage解决iframe页面跨域

    综上所述,`postMessage`是JavaScript解决跨域通信,尤其是涉及iframe页面的关键技术。正确理解和使用它,能够帮助开发者构建更复杂、更安全的Web应用。在实际项目中,结合描述中提到的3_静态页面测试跨域_post...

    php main 与 iframe 相互通讯类

    3. FrameMessage.js:这个文件很可能是用于处理iframe与主页面之间消息传递的JavaScript代码,它可能会利用`window.postMessage` API来实现实时通信。 4. FrameMessage.class.php:这是PHP类文件,可能包含了在...

Global site tag (gtag.js) - Google Analytics