加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

移动开拓中的Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

发布时间:2019-08-24 13:42:02 所属栏目:业界 来源:朱德权
导读:移动开拓规模连年来已经逐渐辞别了蛮横发展的时期,进入了相对成熟的期间。而一向以来 Native 和 Web 的争论从未遏制,通过开拓者孜孜不倦的全力,Web 的服从和 Native 的体验也一向在寻求着均衡。本文聚焦 iOS 开拓和 Web 开拓的交错点,内容涉及到 iOS

基于 WebView 的通讯首要有两个途径,一个是通过体系或私有要领,获取 WebView 傍边的 JSContext,行使体系封装的基于 JSCore 的函数通讯;另一类是通过建设自界说 Scheme 的 iframe Dom,客户端在回调中举办拦截实现。

UIWebView & WKWebView 体系级

在 UIWebView 期间没有提供体系级的函数举办 Web 与 Native 的交互,绝大部门 App 都是通过 WebViewJavascriptBridge(下节先容)来举办通讯,而因为 JavascriptCore 的存在,对付 UIWebView 来说只要有用的获取到内部的 JSContext,也可以到达目标。今朝已知的有用获取 Context 的私有要领如下:

  1. //通过体系废弃函数获取context 
  2.   - (void)webView:(WebView *)webView didCreateJavaScriptContext:(JSContext *)context forFrame:(WebFrame *)frame; 
  3.      
  4.   //通过valueForKeyPath获取context 
  5.   self.jsContext = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 

在 WKWebView 中提供了体系级的 Web 和 Native 通信机制,通过 Message Handler 的封装使开拓服从有了很大的晋升。同时体系封装了 JavaScript 工具和 Objective-C 工具的转换逻辑,也进一步低落了行使的门槛。

  1. // js端发送动静 
  2.  window.webkit.messageHandlers.{NAME}.postMessage() 
  3.  
  4.  //Native在回调中吸取 
  5.  - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message; 

拦截自界说 Scheme 哀求 - WebViewJavascriptBridge

因为私有要领的不变性与考核风险,开拓者不肯意行使上文提到的 UIWebView 获取 JSContext 的方法举办通讯,以是凡是都回收基于 iframe 和自界说 Scheme 的 JavascriptBridge 举办通讯。固然在之后的 WKWebView 提供了体系函数,可是大部门 App 都必要兼容 UIWebView 与 WKWebView,以是今朝的行使范畴如故异常普及。

相同的开源框架有许多,可是无外乎都是 Web 侧按照牢靠的名目建设包括通讯信息的 Request,之后建设隐式 iframe 节点哀求;Native 侧在响应的 WebView 回调中理会 Request 的 Scheme,之后凭证名目理会数据并处理赏罚。

而对付数据转达和回调处理赏罚的题目,在兼容两种 WebView、一连更新的 WebViewJavascriptBridge 中,iframe Request 没有直接转达数据,而是 Web 和 Native 侧维护配合的参数或回调 Queue,Native 通过 Request 中 Scheme 的理会触发对 Queue 里数据的读取。

移动开拓中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

2. 离开 WebView 的通讯 JavaScriptCore

JavascriptCore

JavascriptCore 一向作为 WebKit 中内置的 JS 引擎行使,在 iOS7 之后,Apple 对原有的 C/C++ 代码举办了 OC 封装,成为体系级的框架供开拓者行使。作为一个引擎来讲,JavascriptCore 的词法、语法说明,以及多条理的 JIT 编译技能都是值得深入发掘和进修的偏向,因为篇幅的限定临时不做深入的接头。

移动开拓中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

JavascriptCore.framework

固然 JavascriptCore.framework 只袒露了较少的头文件和体系函数,但却提供了在 App 中离开 WebView 执行 JavaScript 的情形和手段。

  • JSVirtualMachine:提供了 JS 执行的底层资源及内存。固然 Java 与 JavaScript 没有一点相关,可是同样作为假造机,JSVM 和 JVM 做了一部门相同的工作,每个 JSVirtualMachine 独有线程,拥有独立的空间和打点,可是可以包括多个 JSContext。
  • JSContext:提供了 JS 运行的上下文情形和接口,可以禁绝确地领略为,就是建设了一个 JavaScript 中的 Window 工具。
  • JSValue:提供了 OC 和 JS 间数据范例的封装和转换 Type Conversions。除了根基的数据范例,必要留意 OC 中的 Block 转换为 JS 中的 function、Class 转换为 Constructor 等等。
  • JSManagedValue:JavaScript 行使 GC 机制打点内存,而 OC 回收引用计数的方法打点内存。以是在 JavascriptCore 行使进程中,不免会碰着轮回引用以及提前开释的题目。JSManagedValue 办理了在两种情形中的内存打点题目。
  • JSExport:提供了类、属性和实例要领的挪用接口。内部实现是在 ProtoType & Constructor 中实现对应的属性和要领。

移动开拓中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

行使 JavascriptCore 举办通讯

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读