"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.sendToJs = exports.sendToIos = exports.sendToAndroid = exports.iosSendToJs = exports.connectWebViewJavascriptBridge = exports.browserVersion = void 0;

// 判断访问终端
var browserVersion = function browserVersion() {
  var u = navigator.userAgent;
  return {
    trident: u.indexOf('Trident') > -1,
    presto: u.indexOf('Presto') > -1,
    webKit: u.indexOf('AppleWebKit') > -1,
    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,
    mobile: !!u.match(/AppleWebKit.*Mobile.*/),
    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
    android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1,
    iPhone: u.indexOf('iPhone') > -1,
    iPad: u.indexOf('iPad') > -1,
    webApp: u.indexOf('Safari') == -1,
    weixin: u.indexOf('MicroMessenger') > -1,
    qq: u.match(/\sQQ/i) == ' qq',
    isApp: u.indexOf('app/CYLON-APP') > -1
  };
};

exports.browserVersion = browserVersion;

var setupWebViewJavascriptBridge = function setupWebViewJavascriptBridge(callback) {
  if (window.WebViewJavascriptBridge) {
    return callback(window.WebViewJavascriptBridge);
  }

  if (window.WVJBCallbacks) {
    return window.WVJBCallbacks.push(callback);
  }

  window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组，并将 callback 插入到数组中。

  var WVJBIframe = document.createElement('iframe'); // 创建一个 iframe 元素

  WVJBIframe.style.display = 'none'; // 不显示

  WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; // 设置 iframe 的 src 属性

  document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。

  setTimeout(function () {
    document.documentElement.removeChild(WVJBIframe);
  }, 0);
}; // 这里主要是注册 OC 将要调用的 JS 方法。


var iosSendToJs = function iosSendToJs(jsType, func) {
  setupWebViewJavascriptBridge(function (bridge) {
    bridge.registerHandler('iosToJsFunc', function (data, responseCallback) {
      // data 是 OC 传递过来的数据.
      var type = JSON.parse(data).type;
      if (type === jsType) func(data); // responseCallback 是 JS 调用完毕之后传递给 OC 的数据
      // responseCallback({ data: 'js 的数据', from: 'JS' });
    });
  });
};

exports.iosSendToJs = iosSendToJs;

var connectWebViewJavascriptBridge = function connectWebViewJavascriptBridge(callback) {
  if (window.WebViewJavascriptBridge) {
    callback(window.WebViewJavascriptBridge);
  } else {
    document.addEventListener('WebViewJavascriptBridgeReady', function () {
      callback(window.WebViewJavascriptBridge);
    }, false);
  }
}; // 安卓向h5发消息


exports.connectWebViewJavascriptBridge = connectWebViewJavascriptBridge;

var sendToJs = function sendToJs(jsType, func) {
  connectWebViewJavascriptBridge(function (bridge) {
    if (jsType === 'init') {
      bridge.init(function (message, responseCallback) {
        if (responseCallback) responseCallback();
      });
    }

    bridge.registerHandler('functionInJs', function (data) {
      var type = JSON.parse(data).type;
      if (type === jsType) func();
    });
  });
}; // h5向安卓发消息


exports.sendToJs = sendToJs;

var sendToAndroid = function sendToAndroid(data) {
  if (window.WebViewJavascriptBridge) {
    window.WebViewJavascriptBridge.callHandler('action', // 调用java的函数名字
    data);
  }
}; // h5向iosApp发消息


exports.sendToAndroid = sendToAndroid;

var sendToIos = function sendToIos(params) {
  if (window.webkit) window.webkit.messageHandlers.jsFunc.postMessage(params);
};

exports.sendToIos = sendToIos;