'use strict'; import { uuid } from 'utils'; export function Rpc() { this.tasks = []; var self = this; window.addEventListener('message', function (e) { //if(e.source!=window.parent) return; var data = e.data; for (var i = 0, n = self.tasks.length; i < n; i++) { var task = self.tasks[i]; if(task.uuid = data.uuid){ task.resolve(data.execRes); self.tasks.splice(i,1); break; } } },false); } Rpc.prototype.postMessage = function (data) { if(window.parent) window.parent.postMessage(data,'*'); } Rpc.prototype.createTask = function (data) { data.uuid = uuid(); var taskResolve; var promise = new Promise(function (resolve) { taskResolve = resolve; }); var task = Object.assign({},data); task.resolve = taskResolve; this.tasks.push(task); this.postMessage(data); // 发送 return promise; } Rpc.prototype.runMethod = function () { var args = Array.prototype.slice.apply(arguments); var name = args[0]; var params; if(args.length > 1){ args.shift(); params = args; }else{ params = []; } return this.createTask({ type: 'method', name: name, params: params }); } Rpc.prototype.runMethodWithoutReturn = function () { var args = Array.prototype.slice.apply(arguments); var name = args[0]; var params; if(args.length > 1){ args.shift(); params = args; }else{ params = []; } this.postMessage({ type: 'method', name: name, params: params }) } Rpc.prototype.sendMessage = function (name,params) { return this.createTask({ type: 'message', name:name, params:params }); }