js中iframe或者页面间多个应用进行通信

这是一个比较有意思的玩法,想想,你在两个标签页中进行操作,1个标签页是列表,一个标签页是操作的东西。现在你更新操作的东西,想变更自动变更列表。这就有点意思了。

我之所以要实现这种应用,原因如下

会员事件列表 》点击新增会出现一个新的iframe标签页,叫新增会员事件页面

 

新增会员事件页面:

点保存按键的时候,应该自动更新一下列表页。

如下是实现方法:

在新增这个页面中

 // 如果增加了,添加一个localStorage变量 randomStr()是我自定义方法生成随机字符串的
localStorage.setItem("bdzMemberEventEdit", randomStr());
在列表页实现

// 设置对编辑页的监控
    window.addEventListener("storage", function(event) {
        if(event.key == 'bdzMemberEventEdit'){
            // 运行你想运行的方法。你也可以alert(1)试试
            fresh();
        }
    })

在两个标签页同时运行的时候,你就能看到效果了

iframe子页面与父页面通信

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

父页面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()" onclick="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()函数" onclick="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对象的引用。

时间: 2024-09-20 06:32:04

js中iframe或者页面间多个应用进行通信的相关文章

js中iframe调用父页面的方法_javascript技巧

本文实例讲述了js中iframe调用父页面的方法.分享给大家供大家参考.具体实现方法如下: 子页面调用父页面的方法在js中很容易实现.我们只需要在主页面加个函数,然后在子页面通过window.parent.方法()即可实现了 比如调用a()函数,就写成: 复制代码 代码如下: window.parent.a(); 但是我在chrome浏览器下却发现此方法无效了 复制代码 代码如下: //在父页面中调用该函数 <script> function dey() { var cards_frame=d

js实现iframe跨页面调用函数的方法_javascript技巧

本文实例讲述了js实现iframe跨页面调用函数的方法.分享给大家供大家参考.具体实现方法如下: 在项目中难免会遇到这样一个问题就是页面引入了IFrame并且需要父页面调用子页面函数或者子页面需要调用父页面函数.比如说:现在有两个页面parent.html和child.html.其中parent.html中含有IFrame并且IFrame指向child.html.现在需要在parent.html/child.html中调用child.html/parent.html的一个js方法.    具体的

JS中Iframe之间传值及子页面与父页面应用_javascript技巧

在js中,我们时常用到用iframe做系统框架,在子页面也,父页面之间的值传递是一个问题,下面是js获取父窗体和子窗体的对象js: 1.在iframe子页面中获取父页面的元素: a>window.parent.document这个是获取父页面document中的对象: b>如果要获取父页面js中的方法:window.parent.xxxx():xxxx()为方法: 2.在父页面中获取iframe子页面中的元素: a> 复制代码 代码如下: var child = document.get

js中iframe调用父页面实现代码

比如调用a()函数,就写成:  代码如下 复制代码 window.praent.a(); 但是我在chrome浏览器下却发现此方法无效了 //在父页面中调用该函数  代码如下 复制代码 <script> function dey() { var cards_frame=document.frames("card-iframe");    //card-iframe为iframe的名字       cards_frame.checkedCard()             /

js中iframe框架子页面中调用父窗口函数

分两种情况: 第一种:在iframe子页面调用父页面js函数: 子页面调用父页面函数只需要写上window.praent就可以了.比如调用a()函数,可以写成:  代码如下 复制代码 window.praent.a(); a()为方法: 第二种:在iframe子父页面调用子页面js函数: 这个要稍微复杂些,我们可以用:  代码如下 复制代码 document.getElementById('ifrtest').contentWindow.b(); 注:ifrtest是iframe框架的id,b(

JS中Iframe之间传值的方法_javascript技巧

1.在iframe子页面中获取父页面的元素:     a>window.parent.document这个是获取父页面document中的对象:     b>如果要获取父页面js中的方法:window.parent.xxxx():xxxx()为方法: 2.在父页面中获取iframe子页面中的元素:    a>      var child = document.getElementByIdx_x("mainFrame").contentWindow;//mainFra

js在iframe子页面中失效

问题描述 iframe应用的cshtml文件中,js代码不执行 解决方案

js中iframe载入后高度自适应

关于iframe载入完毕的判断介绍了关于iframe载入完成的判断方法 iframe中跨域载入页面,在父级页面由于跨域的限制是访问不了加载页面的window对象,也就调用不了子页面中声明的函数. 因此在父级页面中判断iframe是否载入完毕最初的方式是使用参照元素载入完成的方式:  代码如下 复制代码 var loginiframe = document.createElement("iframe"); loginiframe.src = "http://login.hxsd

利用JS实现iframe 子页面自适应高度

ie6.firefox2 通过, 假设主页面有一个div,里面放置一个iframe<div id="frameBox"><iframe id="frameWin" src="1.html" name="opWin" style="width:100%; height:100% " frameborder="0"  scrolling="no">