WKWebview相对UIWebview而言比较的人性化,因为iOS传递给js代码之后,得到的结果不一定是NSString类型,在很多情况下我们会需要得到一个对象、数组等等数据。顺便提一下一个iOS和H5之间通信的架包:JavaScriptCore.framework。这个架包是苹果自带支持的架包,主要目的就是让开发人员更加简便的去操作iOS和H5之间的通信代码。导入方式是直接从build phases中导入。
WKWebViewJavascriptBridge 能为你做什么?
你可以通过使用 WKWebViewJavascriptBridge 书写几行代码实现混合模块,而无需关心底层的 iOS 与 JS 消息传递实现。
WKWebView 原生交互原理:把 OC 的方法注册到桥梁中,让 JS 去调用。把 JS 的方法注册在桥梁中,让 OC 去调用。
通过 userContentController 把需要观察的 JS 执行函数注册起来。
然后通过一个协议方法,将所有注册过的 JS 函数执行的参数传递到此协议方法中。
1)注册 需要 观察的 JS 执行函数
[webView.configuration.userContentController addScriptMessageHandler:self name:@"jsFunc"];
2)在 JS 中调用这个函数并传递参数数据
window.webkit.messageHandlers.jsFunc.postMessage({name : "李四",age : 22});
3)OC 中遵守 WKScriptMessageHandler 协议
-(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {}
注意:此协议方法里的 WKScriptMessage 有 name & body 两个属性。 name 可以用来判断是哪个 JSFunc 调用了。body 则是 JSFunc 传递到 OC 的参数。
WebViewJavaScriptBridge 使用的基本步骤:
a>在项目中导入 WebViewJavaScriptBridge 框架。
pod ‘WebViewJavascriptBridge’
b>导入头文件 #import <WebViewJavascriptBridge.h> 。建立 WebViewJavaScriptBridge 和 WebView 之间的关系。
_jsBridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
c>注入 JS 函数.
WeakSelf
[self.bridge registerHandler:@"navigateBack" handler:^(id data, WVJBResponseCallback responseCallback) {
// 执行回调函数
if (responseCallback) {
[weakSelf.navigationController popViewControllerAnimated:YES];
}
}];
[self.bridge registerHandler:@"navigateToMine" handler:^(id data, WVJBResponseCallback responseCallback) {
if (responseCallback) {
[weakSelf.navigationController popToRootViewControllerAnimated:YES];
}
}];
JavascriptBridge-iOS和H5交互
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 官方地址:https://github.com/marcuswestin/WebViewJavascriptBri...
- 现在的项目中,界面越来越复杂,混合编程已成一个趋势,项目中嵌入H5已是必然的事,那么OC与H5交互就成一个问题了。...
- 一.- (BOOL)webView:(UIWebView)webView shouldStartLoadWithR...
- WebViewJavascriptBridge 是一个封装处理好的第三方库.功能非常强大.下面就简单介绍一下如何使...