Skip to content

Commit edf1c67

Browse files
committed
fix: avoid global variable conflicts in bridge-loader scripts
1 parent 4bfe01c commit edf1c67

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

2-
export const webViewBridge: string = "class e{constructor(){this.t={}}onNativeEvent(e,t){const n=this.t[e];if(null==n?void 0:n.length)for(const e of n)if(!1===(null==e?void 0:e(t)))break}on(e,t){if(!t)return;let n=this.t[e];n||(n=this.t[e]=[]),n.push(t)}addEventListener(e,t){this.on(e,t)}off(e,t){if(!e)return void(this.t={});let n=this.t[e];n&&(t?(n=this.t[e]=n.filter((e=>e!==t)),0===n.length&&delete this.t[e]):delete this.t[e])}removeEventListener(e,t){return this.off(e,t)}emit(e,t){this.emitEvent(e,JSON.stringify(t))}async injectJavaScriptFile(e){const t=this.elementIdFromHref(e);if(!document.getElementById(t))return new Promise(((n,i)=>{const r=document.createElement(\"script\");r.async=!0,r.setAttribute(\"id\",t),r.addEventListener(\"error\",(e=>{i(this.serializeError(e)),r.parentElement&&r.parentElement.removeChild(r)})),r.addEventListener(\"load\",(function(){window.requestAnimationFrame((()=>{n()})),r.parentElement&&r.parentElement.removeChild(r)})),r.src=e,document.body.appendChild(r)}))}async injectJavaScript(e,t){if(!document.getElementById(e))return new Promise(((n,i)=>{const r=document.createElement(\"script\");r.setAttribute(\"id\",e),r.addEventListener(\"error\",(function(e){i(e),r.parentElement&&r.parentElement.removeChild(r)})),r.text=t,document.body.appendChild(r),window.requestAnimationFrame((()=>n()))}))}async injectStyleSheetFile(e,t){const n=this.elementIdFromHref(e);if(!document.getElementById(n))return new Promise(((i,r)=>{const o=document.createElement(\"link\");o.addEventListener(\"error\",(e=>{r(e),o.parentElement&&o.parentElement.removeChild(o)})),o.addEventListener(\"load\",(()=>{window.requestAnimationFrame((()=>{i()}))})),o.setAttribute(\"id\",n),o.setAttribute(\"rel\",\"stylesheet\"),o.setAttribute(\"type\",\"text/css\"),o.setAttribute(\"href\",e),document.head&&(t&&document.head.childElementCount>0?document.head.insertBefore(o,document.head.firstElementChild):document.head.appendChild(o))}))}async injectStyleSheet(e,t,n){if(!document.getElementById(e))return new Promise(((i,r)=>{var o;const s=document.createElement(\"style\");s.addEventListener(\"error\",r),s.textContent=t,s.setAttribute(\"id\",e);const d=null!==(o=document.head)&&void 0!==o?o:document.body;d?(n&&d.childElementCount>0?document.head.insertBefore(s,d.firstElementChild):document.head.appendChild(s),i()):r(new Error(\"Couldn't find parent element\"))}))}async executePromise(e,t){try{const n=await e;this.emit(t,{data:n})}catch(e){this.emitError(e,t)}}emitError(e,t=\"web-error\"){\"object\"==typeof e&&(null==e?void 0:e.message)?this.emit(t,{err:this.serializeError(e)}):this.emit(t,{err:e})}elementIdFromHref(e){return e.replace(/^[:]*:\\/\\//,\"\").replace(/[^a-z0-9]/g,\"\")}serializeError(e){const{name:t,message:n,stack:i,...r}=e;return Object.keys(r).reduce(((e,t)=>{const n=r[t];return n instanceof HTMLElement||(e[t]=n),e}),{name:t,message:n,stack:i})}}class t extends e{get androidWebViewBridge(){if(\"undefined\"!=typeof androidWebViewBridge)return androidWebViewBridge}emitEvent(e,t){this.androidWebViewBridge.emitEvent(e,t)}}const n=\"ns-bridge-ready\",i=window;if(!i.nsWebViewBridge){i.nsWebViewBridge=new t;for(const e of[n,\"ns-brige-ready\"])\"undefined\"!=typeof CustomEvent?window.dispatchEvent(new CustomEvent(e,{detail:i.nsWebViewBridge})):window.dispatchEvent(new Event(e))}";
3-
export const metadataViewPort: string = "!function(e){const i={initialScale:1},a=e.document;let t=a.querySelector('head meta[name=\"viewport\"]');t||(t=a.createElement(\"meta\"),t.setAttribute(\"name\",\"viewport\"),a.head.appendChild(t));let l=\"<%= VIEW_PORT %>\";l&&\"string\"!=typeof l||(l=i);const{initialScale:n=i.initialScale,width:s,height:c,userScalable:m,minimumScale:o,maximumScale:u}=l,r=[`initial-scale=${n}`];if(s&&r.push(`width=${s}`),c&&r.push(`height=${c}`),\"boolean\"==typeof m)r.push(\"user-scalable=\"+(m?\"yes\":\"no\"));else if(\"string\"==typeof m){const e=`${m}`.toLowerCase();\"yes\"===e?r.push(\"user-scalable=yes\"):\"no\"===e&&r.push(\"user-scalable=no\")}o&&r.push(`minimum-scale=${o}`),u&&r.push(`maximum-scale=${u}`),t.setAttribute(\"content\",r.join(\", \"))}(window);";
2+
export const webViewBridge: string = "class NSWebViewBridge_{constructor(){this.eventHandlers_={}}onNativeEvent(eventName_,data_){const handlers_=this.eventHandlers_[eventName_];if(null==handlers_?void 0:handlers_.length)for(const handler_ of handlers_)if(!1===(null==handler_?void 0:handler_(data_)))break}on(eventName_,handler_){if(!handler_)return;let handlers_=this.eventHandlers_[eventName_];handlers_||(handlers_=this.eventHandlers_[eventName_]=[]),handlers_.push(handler_)}addEventListener(eventName_,handler_){this.on(eventName_,handler_)}off(eventName_,handler_){if(!eventName_)return void(this.eventHandlers_={});let handlers_=this.eventHandlers_[eventName_];handlers_&&(handler_?(handlers_=this.eventHandlers_[eventName_]=handlers_.filter((h_=>h_!==handler_)),0===handlers_.length&&delete this.eventHandlers_[eventName_]):delete this.eventHandlers_[eventName_])}removeEventListener(eventName_,handler_){return this.off(eventName_,handler_)}emit(eventName_,data_){this.emitEvent(eventName_,JSON.stringify(data_))}async injectJavaScriptFile(src_){const elementId_=this.elementIdFromHref(src_);if(!document.getElementById(elementId_))return new Promise(((resolve_,reject_)=>{const script_=document.createElement(\"script\");script_.async=!0,script_.setAttribute(\"id\",elementId_),script_.addEventListener(\"error\",(err_=>{reject_(this.serializeError(err_)),script_.parentElement&&script_.parentElement.removeChild(script_)})),script_.addEventListener(\"load\",(function(){window.requestAnimationFrame((()=>{resolve_()})),script_.parentElement&&script_.parentElement.removeChild(script_)})),script_.src=src_,document.body.appendChild(script_)}))}async injectJavaScript(id_,code_){if(!document.getElementById(id_))return new Promise(((resolve_,reject_)=>{const script_=document.createElement(\"script\");script_.setAttribute(\"id\",id_),script_.addEventListener(\"error\",(function(err_){reject_(err_),script_.parentElement&&script_.parentElement.removeChild(script_)})),script_.text=code_,document.body.appendChild(script_),window.requestAnimationFrame((()=>resolve_()))}))}async injectStyleSheetFile(href_,insertBefore_){const elementId_=this.elementIdFromHref(href_);if(!document.getElementById(elementId_))return new Promise(((resolve_,reject_)=>{const link_=document.createElement(\"link\");link_.addEventListener(\"error\",(err_=>{reject_(err_),link_.parentElement&&link_.parentElement.removeChild(link_)})),link_.addEventListener(\"load\",(()=>{window.requestAnimationFrame((()=>{resolve_()}))})),link_.setAttribute(\"id\",elementId_),link_.setAttribute(\"rel\",\"stylesheet\"),link_.setAttribute(\"type\",\"text/css\"),link_.setAttribute(\"href\",href_),document.head&&(insertBefore_&&document.head.childElementCount>0?document.head.insertBefore(link_,document.head.firstElementChild):document.head.appendChild(link_))}))}async injectStyleSheet(id_,css_,insertBefore_){if(!document.getElementById(id_))return new Promise(((resolve_,reject_)=>{var head_;const style_=document.createElement(\"style\");style_.addEventListener(\"error\",reject_),style_.textContent=css_,style_.setAttribute(\"id\",id_);const target_=null!==(head_=document.head)&&void 0!==head_?head_:document.body;target_?(insertBefore_&&target_.childElementCount>0?document.head.insertBefore(style_,target_.firstElementChild):document.head.appendChild(style_),resolve_()):reject_(new Error(\"Couldn't find parent element\"))}))}async executePromise(promise_,eventName_){try{const result_=await promise_;this.emit(eventName_,{data:result_})}catch(err_){this.emitError(err_,eventName_)}}emitError(err_,eventName_=\"web-error\"){\"object\"==typeof err_&&(null==err_?void 0:err_.message)?this.emit(eventName_,{err:this.serializeError(err_)}):this.emit(eventName_,{err:err_})}elementIdFromHref(href_){return href_.replace(/^[:]*:\\/\\//,\"\").replace(/[^a-z0-9]/g,\"\")}serializeError(err_){const{name:name_,message:message_,stack:stack_,...rest_}=err_;return Object.keys(rest_).reduce(((result_,key_)=>{const value_=rest_[key_];return value_ instanceof HTMLElement||(result_[key_]=value_),result_}),{name:name_,message:message_,stack:stack_})}}class NSWebViewBridgeAndroid_ extends NSWebViewBridge_{get androidWebViewBridge(){if(\"undefined\"!=typeof androidWebViewBridge)return androidWebViewBridge}emitEvent(eventName_,data_){this.androidWebViewBridge.emitEvent(eventName_,data_)}}const readyEventName_=\"ns-bridge-ready\",windowRef_=window;if(!windowRef_.nsWebViewBridge){windowRef_.nsWebViewBridge=new NSWebViewBridgeAndroid_;for(const eventName_ of[readyEventName_,\"ns-brige-ready\"])\"undefined\"!=typeof CustomEvent?window.dispatchEvent(new CustomEvent(eventName_,{detail:windowRef_.nsWebViewBridge})):window.dispatchEvent(new Event(eventName_))}";
3+
export const metadataViewPort: string = "!function(window_){const defaultViewPort_={initialScale:1},doc_=window_.document;let meta_=doc_.querySelector('head meta[name=\"viewport\"]');meta_||(meta_=doc_.createElement(\"meta\"),meta_.setAttribute(\"name\",\"viewport\"),doc_.head.appendChild(meta_));let viewPortConfig_=\"<%= VIEW_PORT %>\";viewPortConfig_&&\"string\"!=typeof viewPortConfig_||(viewPortConfig_=defaultViewPort_);const{initialScale:initialScale_=defaultViewPort_.initialScale,width:width_,height:height_,userScalable:userScalable_,minimumScale:minimumScale_,maximumScale:maximumScale_}=viewPortConfig_,content_=[`initial-scale=${initialScale_}`];if(width_&&content_.push(`width=${width_}`),height_&&content_.push(`height=${height_}`),\"boolean\"==typeof userScalable_)content_.push(\"user-scalable=\"+(userScalable_?\"yes\":\"no\"));else if(\"string\"==typeof userScalable_){const userScalableStr_=`${userScalable_}`.toLowerCase();\"yes\"===userScalableStr_?content_.push(\"user-scalable=yes\"):\"no\"===userScalableStr_&&content_.push(\"user-scalable=no\")}minimumScale_&&content_.push(`minimum-scale=${minimumScale_}`),maximumScale_&&content_.push(`maximum-scale=${maximumScale_}`),meta_.setAttribute(\"content\",content_.join(\", \"))}(window);";

0 commit comments

Comments
 (0)