WebViewJavascriptBridge

在 Swift 中使用 WebViewJavascriptBridge 文章目录前言在 Swift 中使用 WebViewJavascriptBridge 前言 使用 JSBridge 与 H5 和 原生进行进行交互,请参考我的这篇文章:使用 JSBridge 与原生 IOS、Android 进行交互(含 H5、Android、IOS 端代码,附 Demo) 在 Swift 中使用 WebViewJavascriptBridge 和在 OC 中使用类似,直接将下载好... 阅读详情

混合开发中, 重点在于Native与H5的混合使用,那么JavaScript 和 Objective-C 交互也就成为了重中之重。

JS与OC的交互iOS方向大致分为三种:传统WebView的代理方法、JavaScriptCore、第三方框架。

本文围绕目前优秀的第三方框架 WebViewJavascriptBridge 展开.

1. 准备文件, 导入 WebViewJavascriptBridge

$ pod 'WebViewJavascriptBridge'

2. 引入头文件、创建webView, 加载.html文件

#import <WebViewJavascriptBridge/WebViewJavascriptBridge.h>

- (void)creatSubViews {
    self.view.backgroundColor = [UIColor whiteColor];
    _webView = [[UIWebView alloc]init];
    _webView.frame = self.view.bounds;
    _webView.delegate = self;
    _webView.backgroundColor = [UIColor whiteColor];
    _webView.scrollView.showsHorizontalScrollIndicator = NO;
    _webView.scrollView.bounces = NO;
    [self.view addSubview:_webView];
}
3. 初始化WebViewJavascriptBridge实例、声明JS交互
@interface HybridViewController ()

@property (nonatomic, strong) WebViewJavascriptBridge *bridge;

@end

WebViewJavascriptBridge实例

- (void)creatBridge {
    ///1. 开启日志, 方便调试
    [WebViewJavascriptBridge enableLogging];

    ///2. 给ObjC与JS建立桥梁
    self.bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];

    ///3. 设置代理
    [self.bridge setWebViewDelegate:self];

}

声明JS交互, 直接copy到<script>中即可

function setupWebViewJavascriptBridge(callback)
{
    if (window.WebViewJavascriptBridge) {

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

        return window.WVJBCallbacks.push(callback);
    }
    window.WVJBCallbacks = [callback];

    var WVJBIframe = document.createElement('iframe');

    WVJBIframe.style.display = 'none';

    WVJBIframe.src = 'https://__bridge_loaded__';

    document.documentElement.appendChild(WVJBIframe);

    setTimeout(function() {

        document.documentElement.removeChild(WVJBIframe);

    }, 0)  
} 

处理JS交互


setupWebViewJavascriptBridge(function(bridge) {

   ///JavaScript 给 Objective-C 发送 消息
   dom.onmousedown = function () {

        bridge.callHandler('loginAction',{"userID":"123", "name":"JS"}, function(response)
        {
            //处理OC过来的回调
            alert('收到oc过来的回调:'+response)
        }));
    };    

   /// 监听Objective-C消息
   bridge.registerHandler('registerAction', function(data, responseCallback)
   {
            alert('OC给JS, 传递的数据为:'+data)

            /// 告诉OC,JS消息接收成功
            var responseData = { 'result':'handle success' }
            responseCallback(responseData)
   }

});
4. 添加JS事件监听, 发送消息给JS
  • 添加JavaScript事件监听, JavaScript => OC
- (void)addObserverForJavaScript{

    /**
     类似添加JS事件监听
     @param registerHandler 要注册的事件名称(比如这里我们为loginAction)
     @param handel  Block回调函数, 当JS中bridge对象触发了`loginAction`此方法时, 发生回调
     @param data JS端传递过来的数据
     @param responseCallback OC通知JS的回调函数
     registerHandler 是Objc和JavaScript
     */
    [self.bridge registerHandler:@"loginAction" handler:^(id data, WVJBResponseCallback responseCallback)
    {
        NSLog(@"接收到JavaScript传递Objc的消息");

        responseCallback(@"JavaScript, Objc已承购接收到消息");
    }];

}
  • Objective-C 发送 消息 给 JavaScript
- (void)sendMessageToJavaScript{
    ///5. 直接调用JS端注册的HandleName
    [self.bridge callHandler:@"registerAction" data:@{@"foo": @"before ready"} responseCallback:^(id responseData) {
        NSLog(@"oc请求js后接受的回调结果:%@",responseData);
    }];
}
5. 最终实现
- (void)viewDidLoad {

    [super viewDidLoad];

    /*添加子视图*/
    [self creatSubViews];

    /*创建桥接*/
    [self creatBridge];

    /*加载HTML文件*/
    [self loadRequestForHTML];


    //申明js调用oc方法的处理事件,这里写了后,h5那边只要请求了,oc内部就会响应
    [self addObserverToJavaScript];

    ///两秒后给JS发送消息
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self sendMessageTOJavaScript];
    });

}

其实关键在于: OC和JS商定的方法名要统一

bridge.registerHandler方法名  对应   bridge.callHandler方法名

JS CallHandler => OC Register

OC CallHandler => JS Register
WebViewJavascriptBridge源码分析 最近抽时间看了一遍WebViewJavascriptBridge这个开源框架,把看到的内容记录下来 源码地址:https://github.com/marcuswestin/WebViewJavascriptBridge 1、对外接口 初始化OC 初始化JS [WebViewJavascriptBridge bridgeForWebView:( 阅读详情

相关推荐

WebViewJavascriptBridge详细使用

作者CoderJackyHuang,源码WebViewJavascriptBridgeDemo,WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互。如果需要支持到iOS6之前的app,使用它是很不错的。本篇讲讲WebViewJavascriptBridge的基本原理及详细讲讲如何去使用,包括iOS端的使用和JS端的使用。 经过多番百度、Google,发现WebViewJavascriptBridge的资源讲解不是翻译官方文档就是直接说官方提供的demo。但是笔者在写这个demo时也遇到了不少问题,也想看看大家是怎么使用的,特别是JS端,弄了好久都没有回调,原来是因为log。 写下本篇文章,希望大家少走弯路吧!

webview原理和JSBridge

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

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

TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析

在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类

weixin_42526068的博客 284

WebViewJavascriptBridge 教程

`WebViewJavascriptBridge` 的目录结构如下: - `Example Apps`: 包含示例应用代码,展示了如何在实际项目中使用WebViewJavascriptBridge。 - `Tests`: 测试相关的代码,用于验证桥接功能的工作情况。 - `WebViewJavascriptBridge`: 该项目的核心代码库,包括Objective-C和JavaScript部分...

gitblog_01040的博客 919

RK3588+TRL8367s 四网口千兆交换机配置与优化实战

本文详细介绍了基于RK3588高性能SoC与TRL8367s千兆交换芯片构建四网口交换机的完整实战流程。内容涵盖硬件连接、设备树配置、内核驱动加载、性能优化及常见问题排查,重点解析了RGMII时序调试、DSA架构配置等关键步骤,为嵌入式网络设备开发提供实用指南。

weixin_29266647的博客 672

MODTRAN5.2.1安装配置

MODTRAN5.2.1安装配置

Home 4250

第三方库WebViewJavascriptBridge使用介绍

第三方库WebViewJavascriptBridge使用介绍 官网地址: https://github.com/marcuswestin/WebViewJavascriptBridge 1.框架说明 该库的主要作用用于: Objective-C 和 javascript 相互通信,即 oc和 js 方法的互相调用 用html写页面,用UIWebView去加载,对某些htm

人不风流枉少年 9251

​​WPF入门与XAML基础:从零开始构建你的第一个WPF应用​

本文是WPF入门系列首篇,详细介绍WPF的核心优势与开发环境搭建。通过创建第一个WPF项目,解析MainWindow.xaml和App.xaml等关键文件,深入讲解XAML基础语法,包括属性赋值、命名空间和事件绑定。最后通过按钮点击交互示例演示WPF应用程序运行流程,帮助开发者快速上手WPF开发,为后续学习布局系统和数据绑定等高级主题奠定基础。

Hare的博客 3276

WebView与JavaScriptBridge的基本使用方式

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

MIILN的博客 5320

Python爬虫实战:利用最新技术爬取B站视频信息

本文详细介绍了如何使用Python最新技术构建一个功能完善的B站视频信息爬虫。我们从基础爬取开始,逐步深入到反反爬策略、异步处理、数据存储和分析等高级主题。更智能的反反爬策略:使用机器学习识别验证码更高效的分布式架构:结合Kubernetes实现弹性伸缩实时数据管道:将爬取的数据实时推送到数据分析平台多平台支持:扩展支持抖音、YouTube等其他视频平台。

2201_76125261的博客 1040

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 293

WebViewJavaScriptBridge 基本使用

转载于:https://www.jianshu.com/p/d12ec047ce52 在 iOS 开发 Hybrid App 的时候,有两个 WebView 可以选择。 UIWebView & WKWebView。 这两个 WebView 控件,可以完全只借助 iOS 自带的框架进行 OC & JS 交互。 UIWebView 使用 javaScriptCore. WKWe...

飞翔的熊blabla 1945

MobileFusion:基于结构重参数化的移动端红外可见光图像融合方法

MobileFusion提出了一种轻量化的红外与可见光图像融合框架,通过结构重参数化技术实现移动端实时部署。该方法包含可重参数多分支卷积(RepMBConv)、轻量化上下文感知注意力(LCAA)和重参数前馈网络(RepFFN)三大模块,在训练时保留多分支结构增强特征学习,推理时合并为单路算子提升效率。实验表明,MobileFusion在MSRS、FMB等数据集上实现了融合质量与推理速度的平衡,参数量仅4000,在边缘设备上也能高效运行,为资源受限场景提供了实用解决方案。代码已开源。

毕竟是Shy哥 137

WebViewJavascriptBridge 使用教程

WebViewJavascriptBridge 是一个用于在 iOS 和 Android 平台上实现 JavaScript 和原生代码之间通信的开源库。它允许开发者通过消息传递机制在 WebView 和原生应用之间进行交互,支持 WKWebView、UIWebView 和 WebView。 ## 项目快速启动 ### 安装 #### iOS & OSX 使用 CocoaPods 安装: ...

gitblog_00843的博客 1486

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1120

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

vue项目使用WebViewJavascriptBridge

现在在做的项目是 hybrid 开发,H5 页面会嵌入到 IOS 客户端 app 中,于是就涉及到了 H5 与 IOS 交互的问题。在这里记录一下项目中用到的交互方式,重点介绍WebViewJavascriptBridge。 H5 调用 IOS,无返回 项目中最简单的一个交互需求,是在客户端打开 H5 页面后,页面上有一个后退按钮,可以退回到客户端页面。这个需求纯前端是无法做到的,前端...

一片天空 8597

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WebViewJavascriptBridge使用

WebViewJavascriptBridge WebViewJavascriptBridge是一个Objective-C与JavaScript进行消息互通的三方库。github上也有安卓版本,可以同时在两个平台的开发! Objective-C初始化 // 类方法创建一个WebViewJavascriptBridge对象。其中有一个block类型的handle。这个handle主

欢迎来到Jack的程序世界 2898

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WebViewJavascriptBridge解析

前序iOS原生应用和web页面的交互主要有:JavaScriptCore(iOS7以后)与拦截协议两个方法。因为我们的app要兼容iOS6,所以我们在web js和native交互使用的是拦截协议的一个很有名的第三方框架:WebViewJavascriptBridge,本文从源代码来解析一下WebViewJavascriptBridge的工作方式。

game3108的专栏 5200

WebViewJavaScriptBridge深入剖析

前言 前一篇文章中,我们大致的讲述了一下JavaScriptCore这个库在iOS开发中的应用。在文中最后的阶段,我们提到了WebViewJavaScriptBridge这个库。提到这个库,可能有一些人就要说了,现在都什么时代了,谁还会用这个库啊?全是坑!不错,早在三年前,这个库有过一段辉煌的时光,在苹果除了WKWebView之后,渐渐的使用这个库的人越来越少,尽管这个库也是支持了WKWebVie...

weixin_33704234的博客 281

WebViewJavascriptBridge浅析

WebViewJavascriptBridge是一个Objective-C与JavaScript进行消息互通的三方库。通过WebViewJavascriptBridge,我们可以很方便的实现OC和Javascript互调的功能。WebViewJavascriptBridge实现互调的过程也容易理解,就是在OC环境和Javascript环境各自保存一个相互调用的bridge对象,每一个调用之间都有i...

学习记录 1065

WebViewJavascriptBridge 原理分析

网上好多都是在介绍 WebViewJavascriptBridge如何使用,这篇文章就来说说 WebViewJavascriptBridge 设计原理。 主要从两个过程来讲一下:js调用UIViewController中的代码(Native),Native调用js 1.概述    首先有两个问题:     a.Native(中的UIWebView)是否可以直接调用js me

万花筒 邪灵噶 的博客 5101

深入WebViewJavascriptBridge核心实现机制

本文深入分析了WebViewJavascriptBridge的核心实现机制,包括消息传递协议设计、JavaScript注入策略、消息队列管理以及安全机制。重点探讨了自定义URL Scheme与iframe通信机制的工作原理、内联JS代码与资源文件注入的对比、双向消息队列的处理逻辑,以及alert安全超时与异常处理策略。通过详细的技术实现解析和对比分析,揭示了这一跨语言通信桥梁的高效性和可靠性。 ...

gitblog_00173的博客 414
上一篇: CSS文字属性与选择器
下一篇: AOP(Aspect Oriented Programming),面向切面编程
Code_浅蓝
博客等级 码龄11年 28粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值