做两个不同的项目,iframe嵌入并跨域传输数据;之前写过一篇文章,如何简单的处理跨域的问题,及一种比较笨拙的解决方案;以中间页面(html),做数据传输的中转站;
这次发现了一个插件,MessengerJS 来做数据通信,才发现这个封装好的插件做这种跨域的方式其实很简单;这里就简单的分析 一下这MessengerJS,代码比较少,没那么多140行加注释;
主要是用到H5的通信协议postMessage()方法做数据传输;postMessage我会写一篇日志了解一下,现在先解析一下MessengerJS;
MessengerJS源码:
/**
* __ ___
* / |/ /___ _____ _____ ___ ____ ____ _ ___ _____
* / /|_/ // _ \ / ___// ___// _ \ / __ \ / __ `// _ \ / ___/
* / / / // __/(__ )(__ )/ __// / / // /_/ // __// /
* /_/ /_/ \___//____//____/ \___//_/ /_/ \__, / \___//_/
* /____/
*
* @description MessengerJS, a common cross-document communicate solution.
* @author biqing kwok
* @version 2.0
* @license release under MIT license
*/
window.Messenger = (function(){
// 消息前缀, 建议使用自己的项目名, 避免多项目之间的冲突
// !注意 消息前缀应使用字符串类型
var prefix = "[PROJECT_NAME]",
supportPostMessage = 'postMessage' in window;
// Target 类, 消息对象
function Target(target, name, prefix){
var errMsg = '';
if(arguments.length < 2){
errMsg = 'target error - target and name are both required';
} else if (typeof target != 'object'){
errMsg = 'target error - target itself must be window object';
} else if (typeof name != 'string'){
errMsg = 'target error - target name must be string type';
}
if(errMsg){
throw new Error(errMsg);
}
this.target = target;
this.name = name;