UNPKG

@ncp-web/portal-communication

Version:

portal 通讯工具

2 lines (1 loc) 2 kB
!function(){if(!window.origin){var n=window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:"");window.origin=n}}();var n,o=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 i=o.next();try{for(;!i.done;)i.value(n),i=o.next()}catch(n){console.warn("执行失败:"+n+":\n"+i.value.toString()),e()}};e()},n}(),e={},i=function(n){e[n]=new o},r=[],t=function(n){return-1===r.indexOf(n)&&(r.push(n),i(n)),n},s=function(n,o){o=o||window.origin,window.parent.postMessage(n,o)},u=function(){window.addEventListener("message",(function(n){var o=n.data?n.data.type:"";o&&e.hasOwnProperty(o)&&(n.data.origin=n.origin,e[o].dispatch(n.data))}))},a=function(n,o){return e[o]?e[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"}(n||(n={})),u();var c={onShowInfo:function(o){return a(o,t(n.info))},onShowError:function(o){return a(o,t(n.error))},onShowWarn:function(o){return a(o,t(n.warn))},onSessionTimeout:function(o){return a(o,t(n.sessionTimeout))},onOpenMenu:function(o){return a(o,t(n.openMenu))},onMessage:function(o){return a(o,t(n.message))}},f=window.origin,w=function(n,o,e){s({message:n,type:o},e||f)},p=function(n,o,e){s({data:n,type:o},e||f)},d={parent:{set domain(n){f=n}},showInfo:function(o,e){w(o,n.info,e)},showWarn:function(o,e){w(o,n.warn,e)},showError:function(o,e){w(o,n.error,e)},notifySessionTimeout:function(o,e){w(o,n.sessionTimeout,e)},openMenu:function(o,e){p(o,n.openMenu,e)},message:function(o,e){p(o,n.message,e)}};export{c as portalMessageReceive,d as portalMessageSend};