iOS WKWebView和JS交互的两种方式
2017-02-18 00:00
106 查看
摘要: 本文介绍两种方式实现iOS WKWebView和JS交互:1、WKWebViewConfiguration注入WKScriptMessageHandler;2、UIWebViewDelegate回调方法中处理
本文介绍两种方式实现iOS WKWebView和JS交互
WKWebViewConfiguration注入WKScriptMessageHandler
UIWebViewDelegate回调方法中处理
Objc代码中在初始化
本文介绍两种方式实现iOS WKWebView和JS交互
WKWebViewConfiguration注入WKScriptMessageHandler
UIWebViewDelegate回调方法中处理
WKWebViewConfiguration注入WKScriptMessageHandler
网页很简单,只有一个按钮,点击按钮会触发一个方法,在事件的方法中通过调用window.webkit.messageHandlers.NativeModel.postMessage({name: 'zhangyutang', age: 12});把消息发送给Objc。Objc中需要注入相同名称的model:
NativeModel。网页代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>html5page-oc</title> <script> function btn1Click() { window.webkit.messageHandlers.NativeModel.postMessage({name: 'zhangyutang', age: 12}); alert("after call"); } </script> </head> <body> <input type="button" value="button c" onclick="btn1Click()"> </body> </html>
Objc代码中在初始化
WKWebView的时候需要使用
initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration方法来进行初始化。
WKWebViewConfiguration对象需要使用调用方法
addScriptMessageHandler:name来设置JS事件的接收处理器,
addScriptMessageHandler:name方法有两个参数:
ScriptMessageHandler参数需要是一个实现
WKScriptMessageHandler了协议的对象;
name参数是H5页面中调用
postMessage方法使用到的注入对象的名称,H5页面和原生的页面交互使用通过该对象才可以成功调用。
- (WKWebView *)webView { if (!_webView) { WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init]; config.userContentController = [WKUserContentController new]; [config.userContentController addScriptMessageHandler:self name:@"NativeModel"]; _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; _webView.navigationDelegate = self; } return _webView; }
MMWebViewController类实现了实现
WKScriptMessageHandler协议,重写
userContentController:didReceiveScriptMessage回调方法 ,在该方法中处理JS的方法调用,关键的代码片段如下。
@interface MMWebViewController () <WKScriptMessageHandler> @end @implementation MMWebViewController #pragma mark - ......::::::: WKScriptMessageHandler :::::::...... - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { id body = message.body; NSLog(@"=== %@", body); } @end
UIWebViewDelegate回调方法中处理
重写UIWebViewDelegate的回调方法
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler,在该方法中通过判断请求的URL的scheme
来处理特定URL,可以处理原生页面的跳转、原生页面的弹窗等业务逻辑,然后调用decisionHandler(WKNavigationActionPolicyCancel);告诉
WKWebView不用处理这个请求,这个请求已经让原生处理了。简单的代码片段如下
if ([navigationAction.request.URL.scheme isEqualToString:@"plush"]) { [PTLinkUtil handleURLString:navigationAction.request.URL.absoluteString linkType:PTLinkCustomHandler roomID:0]; decisionHandler(WKNavigationActionPolicyCancel); return; } else if ([[navigationAction.request.URL.scheme lowercaseString] isEqualToString:@"lezhua"]) { if ([[navigationAction.request.URL.host lowercaseString] isEqualToString:@"home"]) { NSArray *queryItems = [NSURLComponents componentsWithString:navigationAction.request.URL.absoluteString].queryItems; for (NSInteger i = 0; i < queryItems.count; i++) { NSURLQueryItem *loopItem = queryItems[i]; if ([[loopItem.name lowercaseString] isEqualToString:@"segmentid"]) { [UIUtil showWithSegmentID:[validString(loopItem.value) integerValue]]; } } } decisionHandler(WKNavigationActionPolicyCancel); return; }
相关文章推荐
- ios WKWebView 与 JS 交互实战技巧
- iOS OC与H5网页交互之OC传值给JS(WKWebView)
- iOS与js交互(WebView+WKWebView)
- iOS和JS交互教程之WKWebView-协议拦截详解
- iOS -- WKWebView + KVO 方式获取Web的高度(非js)
- IOS中UIWebView、WKWebView之JS交互
- iOS-WKWebView特性以及与JS交互的一些事
- iOS开发中的WKWebView与JS的交互
- IOS UIWebView转WKWebView中的js交互问题
- iOS 8 WkWebView 网页的配置和前进,后退,js 交互和进度条的加载
- iOS-js与iOS的交互(基于WKWebViewJavascriptBridge第三方)
- iOS用WKWebView与JS交互获取系统图片及WKWebView的Alert,Confirm,TextInput的监听代理方法使用,屏蔽WebView的可选菜单
- iOS WKWebView与JS交互及不能释放问题
- iOS开发中OC与H5网页交互之OC传值给JS(WKWebView)
- iOS 8 WkWebView 网页的配置和前进,后退,js 交互和进度条的加载
- iOS用WKWebView与JS交互获取系统图片及WKWebView的Alert,Confirm,TextInput的监听代理方法使用,屏蔽WebView的可选菜单
- ios下OC与JS交互之WKWebView
- ios WKWebView 与 JS 交互实战技巧
- ios js与oc原生WKWebView方法注入及交互传值
- WKWebView、WebView和JS的交互方式详解