PHP与JS实现iframe跨域及同域通讯的类库

0 下载量 23 浏览量 更新于2024-08-28 收藏 111KB PDF 举报
"这篇文章主要介绍了一个名为FrameMessage的JavaScript类,用于实现PHP主页面(main)与IFrame之间的通信,支持同域和跨域。它包括两个核心文件:FrameMessage.js和FrameMessage.class.php。FrameMessage.js提供调用接口,处理跨域场景,而FrameMessage.class.php负责处理跨域请求并返回执行所需的方法的JavaScript代码。该通信类支持传递各种类型的参数,如字符串、JSON对象和数组。由于旧版浏览器可能不支持JSON.stringify和JSON.parse,所以需要引入json2.js来确保兼容性。" 在PHP主页面(main)与IFrame之间进行通信通常涉及到安全性、跨域限制和数据交换等问题。FrameMessage类解决了这些问题,提供了一种有效的方法来实现通信。`FrameMessage.exec()`是类中的关键方法,接收四个参数:执行的页面URL(用于跨域)、要调用方法的IFrame名称、方法名以及一个包含方法参数的数组。 例如,以下代码展示了如何使用FrameMessage类在主页面调用IFrame中的方法: ```javascript FrameMessage.exec('http://127.0.0.1/execB.php', 'myframe', 'fIframe', ['fdipzone', '{"gender":"male","age":"29"}', ['http://blog.csdn.net/fdipzone', 'http://weibo.com/fdipzone']]); ``` 这段代码将向URL为'http://127.0.0.1/execB.php'的页面发送请求,并在名为'myframe'的IFrame中执行名为'fIframe'的方法,传递的参数包括字符串和数组。 另一方面,IFrame也可以调用主页面的方法,通过类似的方式进行通信。这个过程依赖于JavaScript的事件监听和发布机制,以及DOM操作来实现跨域消息传递。当在IFrame中执行方法时,FrameMessage.js会创建一个临时的iframe,用于同域通信或者处理跨域的预加载请求。 `FrameMessage.class.php`在服务器端接收这些请求,解析参数,并生成一段JavaScript代码,这段代码将被嵌入到调用页面中,以执行实际的方法。这种方法允许在安全的环境下执行跨域操作,因为所有的通信都在服务器端进行了验证和处理。 为了确保所有浏览器的兼容性,特别是对那些不支持JSON.stringify和JSON.parse的老版本浏览器(如IE6/7),开发者需要引入json2.js库。这个库由Douglas Crockford编写,提供了JSON对象的polyfill,使得老版本浏览器也能处理JSON数据。 FrameMessage类提供了一个强大的工具,使得PHP主页面与IFrame之间的通信变得更加简单和灵活,同时考虑到了跨域安全和兼容性问题。无论是同域还是跨域,它都能够有效地传递复杂的数据结构,如字符串、JSON对象和数组,从而促进了页面组件间的高效协作。