# uni-js-bridge **Repository Path**: guome/uni-js-bridge ## Basic Information - **Project Name**: uni-js-bridge - **Description**: uniapp框架中的JsBridge - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 19 - **Forks**: 5 - **Created**: 2020-10-15 - **Last Updated**: 2025-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### uni-js-bridge(H5端) 适用于uni-app框架中webview组件和H5通信的js小工具。此JS是放在H5项目中的;还需要配合uni-app另外封装的webview组件;uni-app的webview组件会放在另一个项目中; ### 安装 执行以下安装命令 ``` npm i uni-js-bridge --save ``` or ``` yarn add uni-js-bridge ``` ### 使用方法 以vue项目为例子 在main.js中引入uni-js-bridge ``` import 'uni-js-bridge' ``` 在publick/index.html中加入以下代码 ```html ``` ### 使用方法说明 注意:这里使用方法是需要uni-app端那边配合的 #### 先看看H5是如何触发uni-app的函数的 首先在uni-app端中需要先注册一个函数提供给H5调用,代码如下: ```javascript this.$refs.webViewBridge.registerHandler('nativeShow', (data, callbackFunction) => { // data: h5给客户端的参数 uni.showToast({ title: 'nativeShow' + JSON.stringify(data), icon: 'none' }) // 调用此函数,触发H5回调,里面的参数是给H5用的 // 注意,如果不调用callbackFunction那么H5就无法触发回调函数 callbackFunction({ toH5Data: '这里的参数是提供给H5的回调函数的' // key是可以随便取的 }) }) ``` 那么在我们H5端需要按如下方法使用: ```javascript UniJsBridge.callHandler( "nativeShow", // 注意这里的名字必须和上面的对应上 { nativeShowData: "nativeShow" }, // 这个参数是传递给uni-app的 res => { // res:就是上面的callbackFunction的参数 // 注意:如果uni-app不调用callbackFunction,那么这个回调函数是不会执行 alert(JSON.stringify(res)); } ); ``` #### 然后看看uni-app如何触发H5的函数的 首先在H5中注册一个函数 ```javascript UniJsBridge.registerHandler("test", (data, responseCallback) => { setTimeout(() => { // data: 是客户端给H5的参数 alert(JSON.stringify(data)); // 把参数传递给客户端,如果不执行的话,uni-app是无法执行回调的 responseCallback('我是给uni-app的参数'); }, 2000); }); ``` 然后在uni-app中 ```javascript this.$refs.webViewBridge.callHandler( 'test', { toH5Data: '33333' }, function(data) { uni.showToast({ title: '哈哈' + data }) } ); ``` [^整个库其实就是这个两个核心API,用这个两个API就可以完成H5和uni-app的通信了;以下提供几个可能也用的上的API]: #### 你也可以在uniapp中设置一个默认的处理函数,给H5调用(其实就是registerHandler,只不过省略了一个参数而已) 首先uni-app端代码 ```js this.$refs.webViewBridge.setDefaultHandler((data, callHandler) => { uni.showToast({ title: 'send' + JSON.stringify(data), icon: 'none' }) callHandler({ send: '给H5的' }) }) ``` h5端代码 ```javascript UniJsBridge.send({ sendData: "给uni-app的" }, res => { alert(JSON.stringify(res)); }); ``` #### 在H5端配置一个默认处理函数,提供给uni-app调用 h5端代码 ```javascript UniJsBridge.init((data, responseCallback) => { alert(JSON.stringify(data)); responseCallback({ initData: "给uni-app使用的", }); }); ``` uni-app端:可以调用多次,H5端会按队列依次处理 ```javascript this.$refs.webViewBridge.send({ fff: '1000.0' }, function(data) { uni.showToast({ title: 'send' + JSON.stringify(data), icon: 'none' }) }) ``` #### 处理uni-app的路由 具体文档参照:https://uniapp.dcloud.io/api/router ```javascript UniJsBridge.uni.navigateTo() ``` ```javascript UniJsBridge.uni.redirectTo() ``` ```javascript UniJsBridge.uni.reLaunch() ``` ```javascript UniJsBridge.uni.switchTab() ``` ```javascript UniJsBridge.uni.navigateBack() ``` #### 获取当前环境 ```javascript UniJsBridge.uni.getEnv() ```