WebViewJavascriptBridge源码分析

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0 本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本 阅读详情
最近抽时间看了一遍WebViewJavascriptBridge这个开源框架,把看到的内容记录下来
源码地址:https://github.com/marcuswestin/WebViewJavascriptBridge

1、对外接口

初始化OC 初始化JS
[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview handler:(WVJBHandler)handler]
 
[WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview webViewDelegate:(UIWebViewDelegate*)webViewDelegate handler:(WVJBHandler)handler]
 
document.addEventListener('WebViewJavascriptBridgeReady', function onBridgeReady(event) { ... }, false)
 
bridge.init(function messageHandler(data, response) { ... })
 
OC发送消息to JS JS发送消息to OC
[bridge send:(id)data]
[bridge send:(id)data responseCallback:(WVJBResponseCallback)responseCallback]
 
bridge.send("Hi there!")
bridge.send({ Foo:"Bar" })
bridge.send(data, function responseCallback(responseData) { ... })
 
OC注册事件(先) JS调用事件(后)
[bridge registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler]
 
WebViewJavascriptBridge.callHandler("handlerName")
 
OC调用事件(后) JS注册事件(先)
[bridge callHandler:(NSString*)handlerName data:(id)data]
[bridge callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)callback]
 
bridge.registerHandler("handlerName", function(responseData) { ... })
 

三类API接口用于OC与JS之间交互:初始化接口;发送消息接口,并且可以添加发送消息完成的回调函数;事件注册和调用接口,需要先在一端注册事件,另一端可以根据事件名称调用函数

除了上述提到的外部方法:还有两个方法十分重要, JS部分最重要的内部方法: _handleMessageFromObjC;OC部分重要的内部方法:flushMessageQueue


2、类结构图


WebViewJavascriptBridge目前既支持原有的UIWebView,也支持iOS8+之后新的WKWebView,使用时可以二选其一;
WebViewjavascriptBridgeBase是通用类,用于处理从Native到JS的消息注入,消息队列处理和分发,JSON数据的序列化和反序列化,LOG输出;

3、源码分析

3.1 消息发送JS-》Native

[bridge send:(id)data]
[bridge send:(id)data responseCallback:(WVJBResponseCallback)responseCallback]

这两个函数最后都是调用_doSend({ data:data }, responseCallback)

function _doSend (message , responseCallback )  {
        if  (responseCallback )  {
                var callbackId  =  ' cb_ ' + (uniqueId ++ ) + ' _ ' + new  Date ( ) . getTime ( )
               responseCallbacks [callbackId ]  = responseCallback
              message [ ' callbackId ' ]  = callbackId
      }
     sendMessageQueue .push (message )
     messagingIframe .src  = CUSTOM_PROTOCOL_SCHEME  +  ' :// '  + QUEUE_HAS_MESSAGE
}

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone) 阅读详情

相关推荐

Android代码-WebViewJavascriptBridge

重要通知 由于DSBridge(笔者开发的一个更强大的跨平台JavaScript Bridge)目前已取得大量用户,由于笔者精力有限,为了集中精力打造精品,此项目将不再维护,笔者将把主要精力放到DSBridge的维护与支持上,也欢迎大家使用DSBridge。: DSBridge for Android: https://github.com/wendux/DSBridge-Android DSBridge for iOS: https://github.com/wendux/DSBridge-IOS WebViewJavascriptBridge []() An Android bridge for sending messages between Java and JavaScript in WebView. and It is a mirror of marcuswestin/WebViewJavascriptBridge (object-c) and Lision/WKWebViewJavascriptBridge(swift) which supports IOS

webview原理和JSBridge

webview是一个嵌入式的浏览器,我们平常使用频率最高的就是客户端内嵌的webview 特点:运行在webview中的JS代码有能力调用原生的系统API,没有传统浏览器沙箱的限制。 目前javascript和客户端(后面统称native)交互的常见方式有两种 JSBridge schema JSBridge 当我们在native内打开m页,native会在全局的window下,为我们注入一个Bridge。这个Bridge里面,会包含我们与native交互的各种方法、比如判断第三方App是否安装、获取网

分享前端开发工程师的一些日常生活、前端知识点、职业发展、对一些问题的看法、感悟等等 8881

安卓webview 的JsBridge连接桥(跟html交互)

HTML调用安卓的方法,要用的连接桥,使用方法在我的博客里可以查看,欢迎大家相互交流

WebViewJavascriptBridge

Web 页面中的 JS 与 iOS Native 如何交互?JS 和 iOS Native 就好比两块没有交集的大陆,如果想要使它们相互通信就必须要建立一座“桥梁”。 WebViewJavascriptBridge是盛名已久的 JSBridge 库,它仅使用了少量代码就实现了对于 Mac OS X 的 WebView 以及 iOS 平台的 UIWebView 和 WKWebView 三种组件的完美支持。 WebViewJavascriptBridge 主要是作为 Mac OS X 和 iOS 端(Na.

CamilleZJ的博客 6922

WebView与JavaScriptBridge的基本使用方式

WebView的常用方法和JS桥的基本使用方式,以及一个简单的demo示例

MIILN的博客 5307

JS和Native交互之 -WebViewJavascriptBridge源码分析

源码地址:https://github.com/marcuswestin/WebViewJavascriptBridge 1、对外接口 初始化OC 初始化JS [WebViewJavascriptBridge bridgeForWebView:(UIWebView/WebView*)webview handler:(WVJBHandler)han

lxm_780337的博客 1613

WebView与Js交互-JsBridge的使用

这里写自定义目录标题前言github地址功能使用方法添加依赖推荐方式简单封装JS库文件判断手机类型设置Android手机桥接设置IOS手机桥接设置Android和IOS统一桥接口JS调用函数JS库文件整体代码Html页面设置Android端使用(这里省略IOS,用法基本相同)xml布局设置Java代码(客户端调用)注册webview监听Java主动调用Js函数测试截图 前言 在WebView的开发...

freelander_j的博客 1万+

【Swift】WebViewJavaScriptBridge深入剖析

WebViewJavaScriptBridge深入剖析

Hanrovey Blog 416

WebViewJavascriptBridge学习

WebViewJavascriptBridge 原理分析重点讲了JS如何调用Native的代码,即使用了URL拦截的方法,就不再详细分析源码了。

慢慢的博客 577

WebViewJavascriptBridge源码解析 -1

WebViewJavascriptBridge源码解析 -1

iosfighterlb - HeyYou 316

WebViewJavascriptBridge源码解读

介绍 在App开发中,会遇到很多和H5交互的问题,双方之间需要能互相调用方法,并接收回调,WebViewJavascriptBridge是一个很不错的选择,它只需要通过在JS中注入少量代码,就可以实现上面的操作。下面,就让我们一起来看看它是如何使用的吧。 用法 App中先初始化WebViewJavascriptBridge: self.bridge = WebViewJavascriptBrid...

weixin_34248118的博客 300

objC与js通信实现--WebViewJavascriptBridge

场景   在移动端开发中,最为流行的开发模式就是hybmid开发,在这种native和h5的杂糅下,既能在某些需求中保证足够的性能,也可以在某些列表详情的需求下采用h5的样式控制来丰富内容。但是在大型产品的开发中,往往前端的职责不仅仅是h5的编写,还包括基本业务逻辑的实现,比如在h5页面中确定当前用户所在的城市(location),我们可以采用html5规范的Geolocation接口,但是更为通...

weixin_30955617的博客 158

webview_jsbridge源码分析及优化

webview_jsbridge是native与H5交互的三方库,在github上面已有13K的start。 源码分析 H5发送消息给Android const setupWebViewJavascriptBridge = function (e) { console.log("window.WebViewJavascriptBridge", window.WebViewJavascriptBridge); if (window.WebViewJavascriptBridge) return

baidu_33853807的博客 590

JsBridge源码分析

客户端、H5注册 客户端 在BridgeWebView的初始化方法中,添加了自定义的BridgeWebViewClient,在onPageFinished方法中,去加载WebViewJavascriptBridge.js文件(在assets目录下): @Override public void onPageFinished(WebView view, String url) { s...

weixin_43887839的博客 492

Android webView与js 交互以及jsbridge框架源码分析

简书链接:http://www.jianshu.com/p/cdf12901c813 最近在处理android webView与js的通信上的问题,作为总结1.简单篇如何实现简单的android 调用js 与js调用android 让webview做一下操作 private void init(Context context){ WebSettings setting =g

否命题的博客 3401

不拦截Request!基于WKWebView的API实现Hybrid容器

在介绍我实现的Hybrid容器之前,建议先了解一下,常用的JavaScript和Native相互通信的方式到底有多少种? 建议阅读一下这篇文章: 从零收拾一个hybrid框架(一)-- 从选择JS通信方案开始 以下,假设你已对JS和Native通信方式有了基本的了解。 常用的三方库WebViewJavascriptBridge,为了兼容UIWebView,继续采用了假跳转拦截Request的方式。...

weixin_34246551的博客 215

跨平台移动开发与Hybrid学习笔记

最近做了iOS平台上Hybrid的调研,水平有限,结合以前尝试Hybrid的一点点经验做个小小的分析。概述了跨平台开发的的各种方案,并通过阅读Cordova-iOS和WebViewJavascriptBridge的源码,分析Hybrid的实现原理和设计。 跨平台开发 这可能是移动开发领域的一个迷梦,无数人在用不同的方式想做好这一件事情,现在看起来还没有一...

weixin_33921089的博客 257

CIDFont.rar

Acrobat 在打开中文文本PDF时,总是提示需要"简体中文语言支持包"方可正确显示本页面。可用以下方法解决:下载本文件,解压后复制CIDFont 文件夹粘贴到Acrobat X Pro/App/Resource/ 下即可解决问题。

上一篇: Android SDK Manager国内下载缓慢的问题
kingnightdream
博客等级 码龄20年 118粉丝 56原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值