UNPKG

@ncp-web/portal-communication

Version:

portal 通讯工具

2 lines (1 loc) 2.04 kB
var portal=function(n){"use strict";!function(){if(!window.origin){var n=window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:"");window.origin=n}}();var o,e=function(){function n(){this._observerList=[]}return n.prototype.subscribe=function(n){var o=this,e=this._observerList.push(n)-1;return{unsubscribe:function(){o._observerList.splice(e,1)}}},n.prototype.dispatch=function(n){var o=this._observerList.values(),e=function(){var r=o.next();try{for(;!r.done;)r.value(n),r=o.next()}catch(n){console.warn("执行失败:"+n+":\n"+r.value.toString()),e()}};e()},n}(),r={},t=function(n){r[n]=new e},i=[],s=function(n){return-1===i.indexOf(n)&&(i.push(n),t(n)),n},u=function(n,o){o=o||window.origin,window.parent.postMessage(n,o)},a=function(){window.addEventListener("message",(function(n){var o=n.data?n.data.type:"";o&&r.hasOwnProperty(o)&&(n.data.origin=n.origin,r[o].dispatch(n.data))}))},c=function(n,o){return r[o]?r[o].subscribe(n):(console.error("未实现对"+o+"类型的消息监听"),{unsubscribe:function(){console.error("未实现对"+o+"类型的消息监听")}})};!function(n){n.info="info",n.warn="warn",n.error="error",n.sessionTimeout="sessionTimeout",n.openMenu="openMenu",n.message="message"}(o||(o={})),a();var f={onShowInfo:function(n){return c(n,s(o.info))},onShowError:function(n){return c(n,s(o.error))},onShowWarn:function(n){return c(n,s(o.warn))},onSessionTimeout:function(n){return c(n,s(o.sessionTimeout))},onOpenMenu:function(n){return c(n,s(o.openMenu))},onMessage:function(n){return c(n,s(o.message))}},w=window.origin,p=function(n,o,e){u({message:n,type:o},e||w)},d=function(n,o,e){u({data:n,type:o},e||w)},g={parent:{set domain(n){w=n}},showInfo:function(n,e){p(n,o.info,e)},showWarn:function(n,e){p(n,o.warn,e)},showError:function(n,e){p(n,o.error,e)},notifySessionTimeout:function(n,e){p(n,o.sessionTimeout,e)},openMenu:function(n,e){d(n,o.openMenu,e)},message:function(n,e){d(n,o.message,e)}};return n.portalMessageReceive=f,n.portalMessageSend=g,n}({});