WebViewJavascriptBridge用法

参考文献:http://www.cnblogs.com/jiang-xiao-yan/p/5345755.html

     http://blog.youkuaiyun.com/sk719887916/article/details/51569599

 

iOS与H5交互的方案

纵观所有iOS与H5交互的方案,有以下几种:

  • 第一种:有很多的app直接使用在webview的代理中通过拦截的方式与native进行交互,通常是通过拦截url scheme判断是否是我们需要拦截处理的url及其所对应的要处理的功能是什么。任意版本都支持。
  • 第二种:iOS7之后出了JavaScriptCore.framework用于与JS交互,但是不支持iOS6,对于还需要支持iOS6的app,就不能考虑这个了。若需要了解,看最后的推荐阅读。
  • 第三种:WebViewJavascriptBridge开源库使用,本质上,它也是通过webview的代理拦截scheme,然后注入相应的JS。
  • 第四种:react-native,这个没玩过(与前三种不同)。

本篇文章专讲讲WebViewJavascriptBridge。

WebViewJavascriptBridge的基本原理

我们看看WebViewJavascriptBridge.m中Webview代理拦截的代码:

在拦截后,通过先通过-isBridgeLoadedURL:方法判断URL是否是需要bridge的URL,若是,则通过injectJavascriptFile方法注入JS;否则判断URL是否是队列消息,若是,则执行查询命令JS并刷新消息队列;最后,URL被识别为未知的消息。

 

在JS端,嵌入步骤是:

  • 第一步:将下面的代码放在JS中:

这段代码是固定的,必须要放到js中。

  • 第二步:在下面的方法体里写相关JS代码:

JS调用iOS代码

通过bridge.callHandler来调用:

其中,各参数说明如下:

JS端加入WebViewJavascriptBridge代码注意事项

如果在下面的函数体内有任何错误,都不会有打印日志,也不会有任何回调:

因此,如果遇到什么也没有输出,说明你写错了。另外,上面有demo中,log函数是自定义的,不是系统的,因此如果没有加入这个函数的定义,调用它也会导致不能交互。

iOS端如何使用

  • 第一步:开启日志
  • 第二步:给ObjC与JS建立桥梁
  • 第三步:注册HandleName,用于给JS端调用iOS端
  • 第四步:直接调用JS端注册的HandleName

转载于:https://www.cnblogs.com/RAINHAN/p/7229542.html

### Vue WebViewJavascriptBridge 使用方法 在 Vue 项目中使用 `WebViewJavascriptBridge` 可以实现 JavaScript 和原生应用之间的高效交互。通过这种方式,可以方便地让 H5 页面与 iOS 或 Android 应用进行数据交换。 #### 初始化桥接器 为了确保桥接器能够在页面加载时立即可用,在创建 Vue 实例之前初始化 `WebViewJavascriptBridge` 是必要的[^2]: ```javascript import { createApp } from 'vue'; import App from './App.vue'; // 初始化 WebViewJavascriptBridge let bridge; if (window.WebViewJavascriptBridge) { bridge = window.WebViewJavascriptBridge; } else { document.addEventListener('WebViewJavascriptBridgeReady', function() { bridge = window.WebViewJavascriptBridge; }, false); } const app = createApp(App); app.config.globalProperties.$bridge = bridge; app.mount('#app'); ``` #### 注册处理程序 为了让原生端能够向 Web 端发送消息并接收响应,可以在 Vue 组件内部注册处理器函数来监听来自原生的应用请求[^3]: ```javascript export default { mounted() { this.$bridge.registerHandler('appToVue', (data, responseCallback) => { console.log(`Received data from native: ${JSON.stringify(data)}`); const responseData = { message: 'Response from web' }; if (typeof responseCallback === 'function') { responseCallback(responseData); } }); }, }; ``` #### 发送消息到原生层 当需要主动触发事件给原生侧时,则可以通过调用 `callHandler()` 方法传递参数以及可选的成功回调函数[^4]: ```javascript methods: { sendMessageToNative(message) { this.$bridge.callHandler('nativeFunctionName', message, (response) => { console.log(`Got response from native: ${response}`); }); } } ``` 以上就是在 Vue 中利用 `WebViewJavascriptBridge` 完成 JS 和 Native 的双向通讯的方法概述。这种方法不仅提高了跨平台开发效率,还增强了用户体验的一致性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值