美文网首页
创建 jsBridge.js 文件

创建 jsBridge.js 文件

作者: 心存暖人_iOS | 来源:发表于2021-10-12 17:17 被阅读0次

1、创建 jsBridge.js 文件

// #ifdef H5
const u = navigator.userAgent
// Android终端
const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1
// iOS 终端
const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)

function setupWebViewJavascriptBridge(callback) {
  // Android使用
  if (isAndroid) {
    if (window.WebViewJavascriptBridge) {
      callback(window.WebViewJavascriptBridge)
    } else {
      document.addEventListener(
        'WebViewJavascriptBridgeReady',
        function () {
          callback(window.WebViewJavascriptBridge)
        },
        false
      )
    }
    // sessionStorage.phoneType = 'android'
  }
  if (isiOS) {
    if (window.WebViewJavascriptBridge) return callback(window.WebViewJavascriptBridge)
    if (window.WVJBCallbacks) return window.WVJBCallbacks.push(callback)
    window.WVJBCallbacks = [callback]
    var WVJBIframe = document.createElement('iframe')
    WVJBIframe.style.display = 'none'
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'
    document.documentElement.appendChild(WVJBIframe)
    setTimeout(function () {
      document.documentElement.removeChild(WVJBIframe)
    }, 0)
    // sessionStorage.phoneType = 'ios'
  }
}

// 注册回调函数,第一次连接时调用 初始化函数(android需要初始化,ios不用)
setupWebViewJavascriptBridge(bridge => {
  if (isAndroid) {
    // 初始化
    bridge.init((message, responseCallback) => {
      var data = {
        'Javascript Responds': 'Wee!'
      }
      responseCallback(data)
    })
  }
})
// #endif

export default {
  // js调APP方法 (参数分别为:app提供的方法名  传给app的数据  回调)
  callHandler(name, data, callback) {
    // #ifdef H5
    setupWebViewJavascriptBridge(bridge => {
      bridge.callHandler(name, data, callback)
    })
    // #endif
  },
  // APP调js方法 (参数分别为:js提供的方法名  回调)
  registerHandler(name, callback) {
    // #ifdef H5
    setupWebViewJavascriptBridge(bridge => {
      bridge.registerHandler(name, (data, responseCallback) => {
        callback(data, responseCallback)
      })
    })
    // #endif
  }
}

2、main.js 中引入

import jsBridge from '@/utils/jsBridge'
Vue.prototype.$jsBridge = jsBridge

3、项目中使用

this.$jsBridge.callHandler('getParameter', 'js调用原生成功了', response => {
      this.canShu = JSON.parse(response);
      this.initDetailData();
});
this.$jsBridge.registerHandler('getParameter', (data, responseCallback) => {
      this.canShu = JSON.parse(data);
      this.initDetailData();
      responseCallback('原生调用js成功了');
});

相关文章

  • 创建 jsBridge.js 文件

    1、创建 jsBridge.js 文件 2、main.js 中引入 3、项目中使用

  • WKWebView加载js遇到的问题

    需求:hybrid混合开发,大概就是把.html和.css等资源文件存在本地,通过jsBridge.js来进行交互...

  • vue中使用JSbridge与APP端进行交互

    app与h5混合开发h5需要调原生的方法实现具体功能1.新建JSbridge.js文件 二、在main.js中加入...

  • pycharm 创建.sh和.bat文件

    Mac 创建.bat文件 创建.sh文件 Windows 创建.bat文件 创建.sh文件 或

  • Terminal 下常见语法

    创建文件夹:mkdir xxxx创建文件(举例创建swift文件):touch xxx.swift创建文件(举例创...

  • 使用命令创建一个文件

    一. 使用命令创建一个文件? 1.touch 创建一个文件 同时创建两个文件 批量创建文件(如创建2000个文件)...

  • python操作文件之os库

    创建文件 删除文件 创建目录和创建多层目录

  • Java高级2

    文件与流 File类 创建目录 程序运行结果 创建文件 文件是存放在文件夹下的,所以应该先创建文件夹,后创建文件,...

  • Linux基本使用

    查看文件安装目录 查看文件 创建文件夹 创建文件 编辑文件 删除文件

  • Linux操作

    touch mn ——创建二进制文件 mkdir 文件名 ——创建文件夹 vi 文件名.文件格式——创建文件

网友评论

      本文标题:创建 jsBridge.js 文件

      本文链接:https://www.haomeiwen.com/subject/kyfjoltx.html