ipu的trunk版的android工程和服务端工程。

sendmsg.js 1.9KB

    /** * paras里面的项属性或子属性值不能为函数,如 paras:[function(){}, {action:function(){}}]; * 上面paras,数组第一项function(){}是没问题的,代码已做处理,第二项 {action:function(){}} 会有问题 * * options = { * objName:str, // 父窗口中,模块名称,必需 * method:str // 要调用的模块方法,必需 * paras:array // 调用方法所需参数,数组格式,必需, * } */ var sendMsg = (function() { var callBackInfos = {}; // 存储需要回调的方法 var uid = 0; // id索引,自增 function sendMsg(options) { // 可做一些基础参数检查,检查参数是否齐全 var paras = options.paras; var localId = options.id = uid++; // 进行编号 var callBacks = callBackInfos[localId] = {}; var callBackIndexs = options.callBackIndexs = []; // 若是方法就需要进行替换,因为postMessage不支持传递函数对象 for ( var key in paras) { if (typeof paras[key] == "function") { callBacks[key] = paras[key]; paras[key] = 'function'; // 将function修改为字符串'function' callBackIndexs.push(key); // 记录下标 } } window.parent.postMessage(options, "*"); // 给父窗口发消息,*任何域名domain alert('send'); } function receiveMessage(event) { console.dir(event); alert('receive'); alert('child receive'+event); alert(JSON.stringify(event.data)); var data = event.data; var code = data.code; if (code >= 0) { // 大于0表示调用成功 var localId = data.id; var result = data.result; callBackInfos[localId][code].apply(this, result); delete callBackInfos[localId]; // 移除相关信息 } else { // 表示参数验正失败, 此处理自己处理 alert('invalid:'+data.result); } } window.addEventListener("message", receiveMessage, false); return sendMsg; })();