close
当前位置: 物联网在线 > 技术文库 > ios >

WebViewJavascriptBridge原理解析(6)

这里会调用handler方法,通过javascript传过来的responseId获取对应的 WVJBResponseCallback 。然后执行这个block。到这里从OC发送消息到javascript并且javascript返回消息给OC的流程走完了。

WEB发消息给OC

首先通过 ExampleAPP.html 中的 bridge.callHandler 方法,这里的bridge就是 window.WebViewJavascriptBridge 对象:

bridge.callHandler('OC提供方法给JS调用',params, function(response) { log('JS调用OC的返回值', response) })

接下来调用 window.WebViewJavascriptBridge 中的callHander方法

//web端调用一个OC注册的消息 function callHandler(handlerName, data, responseCallback) { if (arguments.length == 2 && typeof data == 'function') { responseCallback = data; data = null; } _doSend({ handlerName: handlerName, data: data }, responseCallback); }

然后调用 WebViewJavascriptBridge_JS.js 中的方法执行具体的操作。具体就和OC调用javascript过程一样了,就不解释了。

//把消息从JS发送到OC,执行具体的发送操作。 function _doSend(message, responseCallback) { if (responseCallback) { var callbackId = 'cb_' + (uniqueId++) + '_' + new Date().getTime(); //存储消息的回调ID responseCallbacks[callbackId] = responseCallback; //把消息对应的回调ID和消息一起发送,以供消息返回以后使用。 message['callbackId'] = callbackId; } //把消息放入消息列表 sendMessageQueue.push(message); //下面这句话会出发JS对OC的调用 //让webview执行跳转操作,从而可以在 //webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 中拦截到JS发给OC的消息 messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE; } 总结

其实现在想想,原理很简单。

分别在OC环境和javascript环境都保存一个bridge对象,里面维持着requestId,callbackId,以及每个id对应的具体实现。

OC通过javascript环境的 window.WebViewJavascriptBridge 对象来找到具体的方法,然后执行。

javascript通过改变iframe的src来出发webview的代理方法 webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 从而实现把javascript消息发送给OC这个功能。

其实这里只是解析了webview与OC交互的桥接问题,其他比如webview中的请求拦截、添加进度条、运营商劫持、如何组织交互规则等问题这里还没有涉及。这些在我们项目中运用,具体就不抽出来了。

来自:https://segmentfault.com/a/1190000008948594


(责任编辑:ioter)

用户喜欢...

我们和毫米波雷达来一次“亲密接触”,了解一下它的概念和工作原理

无论是激光雷达还是摄像头、超声波传感器,都容易受恶劣天气环境影响导致性能降低甚至失效,因而都存在致命缺陷!但毫米波雷达凭借其可穿透尘雾、雨雪、不受恶劣天气影响的绝对优势,...


对数放大器的基本原理及其处理宽动态范围信号的方法

使用高动态范围信号对设计人员来说是一个主要问题。 如何将幅度变化超过100分贝(dB)的信号应用于线性放大器或模数转换器(ADC),典型动态范围为60 dB至100 dB? 像这样的信号发生在回波...


使用 ToF 传感器进行距离测量和手势识别的基本原理

很多应用需要在不接触实际物体的情况下,感测物体的存在或距离。这种接近感应需求催生了众多竞争性解决方案,包括光学飞行时间 (ToF) 传感器。虽然这些传感器非常精确,但其成本一直非...


电流测量的基本原理:第 1 部分 - 电流检测电阻器

编者按:本系列文章包含两个部分,将介绍电流检测中容易忽视的细节。本文为第 1 部分,将讨论电流检测电阻的一般设置、选择和实现。第 2 部分将讨论相关电路,例如关键的模拟前端 (AF...


什么是锁相环(PLL)?锁相环的工作原理是什么?锁相环电路对硬件电路连接有什么要求?

锁相环是一种反馈电路,其作用是使得电路上的时钟和某一外部时钟的相位同步。PLL通过比较外部信号的相位和由压控晶振(VCXO)的相位来实现同步的,在比较的过程中,锁相环电路会不断根...


IBM解析2018年最流行的五项IoT趋势

2017年,物联网技术(loT)为传统行业带来了变革的风声和兴奋的议论。这是一场实质性的转变。我们已经能够看到,几乎所有的行业都在投资物联网,而且其中的佼佼者已经开始迅速采取行...


神经网络从原理到实现

1.简单介绍 在机器学习和认知科学领域,人工神经网络(artificial neural network,缩写ANN),简称神经网络(neural network,缩写NN)或类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,...


自动扫地机器人好用吗?智能特性全面解析

生活在如今这样一个节奏快、工作压力大的时代,我们的压力也是越发的大了,但是人类的智慧是强大的,智能家居...


unity静态批处理原理理解

1、静态批处理的时间点 1)在游戏导出的时候,在player setting中勾选static batching,这样在导出包的时候就进行批处理,导出来的包就会比较大 2 ) 在游戏场景中勾选场景物体的static选项,在加...


统计模式识别的原理与方法

1 统计模式识别的原理与方法简介 1.1 模式识别 什么是模式和模式识别? 广义地说,存在于时间和空间中可观察的事物,如果可以区别它们是否相同或相似,都可以称之为模式;狭义地说,模...