admin 管理员组

文章数量: 1184232


2024年4月13日发(作者:rotationkey下载)

不同源frame 通信 -回复

不同源frame通信是指在网页中存在不同源的iframe(内联框架)元

素,而这些不同源的iframe之间需要进行数据交互或通信的情况。由于

浏览器的同源策略限制了不同源网页间的直接数据交互,需要采取其他

方法来实现不同源frame的通信。本文将针对这个主题,从讲解什么是

不同源frame、为什么出现同源策略、如何克服同源策略以实现不同源

frame通信等方面展开阐述。

首先,不同源frame是指在同一个网页中,通过iframe元素嵌入的其他

网页,这些嵌入的网页的来源域名与主网页的来源域名不一致。例如,

主网页的来源域名是

为了保障用户信息的安全和网站的安全,同源策略被引入到现代浏览器

中。同源策略规定,同一个域名下的网页之间可以自由进行数据交互,

而不同域名下的网页之间则受到限制。这种限制包括无法进行跨域AJAX

请求、无法获取不同域名网页的DOM、无法共享Cookie等。同源策略

的引入大大提高了网络安全性,但也给不同源frame通信带来了挑战。

针对不同源frame间的通信问题,有以下几种常见的解决方法:

第一种方法是利用window对象的postMessage方法来实现跨源通

信。postMessage方法允许不同域名的网页通过一个共享窗口对象进行

信息传递。具体实现步骤如下:

1. 在主网页中,使用JavaScript的postMessage方法发送消息到

iframe窗口中。这个方法接受两个参数:要发送的消息和目标窗口的源

(即目标iframe的来源域名)。

2. 在被嵌入的iframe网页中,使用JavaScript通过监听message事件

来接收来自主网页的消息。可以通过检查消息的来源域

名,并通过获取消息内容。

3. 在被嵌入的iframe网页中,可以通过postMessage方法向主网页发

送回复消息。同样地,这个方法接受两个参数:要发送的消息和目标窗

口的源。

通过postMessage方法,不同域名下的网页可以进行双向的通信,实现

了跨域数据交互和通信。

第二种方法是跨文档消息通道(Cross-document Messaging,简称

XDM)。XDM是一种基于HTML5标准的跨文档通信机制,类似于

postMessage方法,实现了不同源frame的通信。具体实现步骤如下:

1. 在主网页中,创建一个隐藏的iframe元素,并设置src属性为目标域

名下的一个空HTML页面。

2. 在主网页中,在iframe的onload事件中,通过JavaScript嵌入一

个脚本来创建一个全局变量,该变量可以用于与iframe中的网页进行通

信。

3. 在被嵌入的iframe网页中,通过JavaScript将需要传递的数据存储

在上述全局变量中。

4. 在主网页中可以通过访问iframe的window对象来获取存储在全局

变量中的数据。

通过XDM,不同域名下的网页可以在主网页中创建一个共享的变量,以

实现跨域通信。

第三种方法是利用服务器端作为中间转发。这种方法需要在服务器端进

行一些额外的开发工作,但可以解决浏览器安全策略所带来的限制。具

体实现步骤如下:

1. 在主网页中,将需要传递的数据发送到服务器端,可以通过AJAX请

求或者其他方式。

2. 服务器端接收到请求后,将数据存储或处理,并提供一个标识符或者

临时链接。

3. 在被嵌入的iframe网页中,可以通过AJAX等方式请求服务器端,获

取在第二步中生成的标识符或临时链接。

4. 通过获取的标识符或链接,在被嵌入的iframe网页中,获取服务器端

存储的数据。

这种方法的优点是在服务器端实现了数据交互,不受浏览器的同源策略

所限制,但需要服务器端进行额外的开发工作。

综上所述,不同源frame的通信可以通过window对象的

postMessage方法、跨文档消息通道以及与服务器端的中间转发来实

现。这些方法可以有效地克服同源策略所带来的限制,实现不同源

frame之间的数据交互和通信。在实际的网页开发中,根据具体的需求

和场景选择合适的通信方法,可以更好地实现不同源frame的通信。


本文标签: 网页 方法 服务器端 消息 域名