UNPKG

vue-webview-js-bridge

Version:

webview-js-bridge plugin for Vue.js

6 lines 4.1 kB
/** * vue-webview-js-bridge v0.0.8 * (c) 2019 Kntt * @license MIT */ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):e.VueWebviewJsBridge=o()}(this,function(){"use strict";function o(e,o){if(!(e instanceof o))throw new TypeError("Cannot call a class as a function")}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(e,o,n){return o&&i(e.prototype,o),n&&i(e,n),e};function i(e,o){for(var n=0;n<o.length;n++){var i=o[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var t=Object.assign||function(e){for(var o=1;o<arguments.length;o++){var n=arguments[o];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},s=(e(r,[{key:"registerHandler",value:function(e,o){}},{key:"callHandler",value:function(e,o,n){this.mockHandler(o,n)}}]),r);function r(e){if(o(this,r),"[object Function]"!==Object.prototype.toString.call(e))throw new Error("mockHandler "+function(e){return null==e?String(e):"object"===(void 0===e?"undefined":n(e))?{"[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object Error]":"error"}[Object.prototype.toString.call(e)]||"object":void 0===e?"undefined":n(e)}(e)+" is not a function");this.mockHandler=e}var a,c,d,l,u,f,p,m=(a={},c=navigator.userAgent,d=c.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),l=c.match(/(Android);?[\s\/]+([\d.]+)?/),u=c.match(/(iPad).*OS\s([\d_]+)/),f=c.match(/(iPod)(.*OS\s([\d_]+))?/),p=!u&&c.match(/(iPhone\sOS|iOS)\s([\d_]+)/),a.ios=a.android=a.windows=a.iphone=a.ipod=a.ipad=a.androidChrome=!1,d&&(a.os="windows",a.osVersion=d[2],a.windows=!0),l&&!d&&(a.os="android",a.osVersion=l[2],a.android=!0,a.androidChrome=0<=c.toLowerCase().indexOf("chrome")),(u||p||f)&&(a.os="ios",a.ios=!0),p&&!f&&(a.osVersion=p[2].replace(/_/g,"."),a.iphone=!0),u&&(a.osVersion=u[2].replace(/_/g,"."),a.ipad=!0),f&&(a.osVersion=f[3]?f[3].replace(/_/g,"."):null,a.iphone=!0),a.ios&&a.osVersion&&0<=c.indexOf("Version/")&&"10"===a.osVersion.split(".")[0]&&(a.osVersion=c.toLowerCase().split("version/")[1].split(" ")[0]),a.iphonex=a.ios&&812===screen.height&&375===screen.width,a.webView=(p||u||f)&&c.match(/.*AppleWebKit(?!.*Safari)/i),a),w=(e(b,[{key:"init",value:function(e){var o=this.options,n=o.debug,i=o.mock,t=o.mockHandler;if(i&&t){n&&console.log("[VueJsBridge] work in mock mode...");var r=new s(t);return e(r)}if(m.android)window.WebViewJavascriptBridge?e(window.WebViewJavascriptBridge):document.addEventListener("WebViewJavascriptBridgeReady",function(){e(window.WebViewJavascriptBridge)},!1);else{if(window.WebViewJavascriptBridge)return e(window.WebViewJavascriptBridge);if(window.WVJBCallbacks)return window.WVJBCallbacks.push(e);window.WVJBCallbacks=[e];var a=document.createElement("iframe");a.style.display="none",a.src="wvjbscheme://__BRIDGE_LOADED__",document.documentElement.appendChild(a),setTimeout(function(){document.documentElement.removeChild(a)},0)}}},{key:"registerHandler",value:function(o,n){var e=this,i=this.options.delay;setTimeout(function(){e.init(function(e){e.registerHandler(o,n)})},i)}},{key:"callHandler",value:function(o){var e=this.options,n=e.debug,i=e.nativeHandlerName,t=void 0,r=void 0,a=new Promise(function(e,o){t=e,r=o});return n&&console.info("[VueJsBridge] Start calling NativeHandler with payload:",o),this.init(function(e){try{e.callHandler(i,o,function(e){n&&console.info("[VueJsBridge] Success response:",e),t(e)})}catch(e){n&&console.info("[VueJsBridge] Failed error:",e),r(e)}}),a}}]),b);function b(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};o(this,b),this.options=e}var v={debug:!0,schemaName:"yy",delay:200,nativeHandlerName:"nativeHandler",mock:!0,mockHandler:null};return{install:function(e,o){var n=t({},v,o);Object.defineProperty(e.prototype,"$bridge",{value:new w(n)})},version:"0.0.8"}});