加载函数
加载HTML、txt、word、PDF等内容。
网页导航
相关属性
相关方法
协议
UIWebViewDelegate与WKNavigationDelegate等效协议方法
两个 WebView(_:decidePolicyFor:decisionHandler:)
外表看着差不多,其实质的区别在于第一个参数
WKNavigationAction:网页信息
WKNavigationResponse:网页响应
WKNavigationDelegate余下一个协议方法
/* 开始获取到网页内容时返回 */
func WebView(WKWebView, didCommit: WKNavigation!)
WKScriptMessageHandler
用于App与JS交互,提供从web中收消息的回调方法,必须实现。
WKUIDelegate
用于处理输入、确认、警告提示框。在UIWebView中可以直接执行,WKWebView需要在此方法中接收JS通知并调用原生方法处理。
与JS交互
UIWebView与JS的交互
UIWebView与JS的交互是通过JavaScriptCore库中的JSContext对象。
JS调用原生代码
iOS7以前App通过WebView(_:shouldStartLoadWith:navigationType:) 代理方法拦截网络请求,并解析url参数,根据结果调用对应原生代码方法。
iOS7+ 通过官方的WebKit 的 JavaScript 引擎JavaScriptCore实现OC与JS互调,此方式可同步返回执行结果。
self.jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.jsContext.exceptionHandler = ^(JSContext * con,JSValue * exception){
NSLog(@"JS Error:%@",exception);
};
原生代码调用JS
原生通过调用UIWebView的stringByEvaluatingJavaScript (from:)方法来调用JS代码
WKWebView与JS的交互
WKWebView与JS交互通过WKScriptMessageHandler协议的代理方法进行。web的window对象提供webkit对象实现共享,WKWebView通过指定WKUserContentControoler对象的scriptMessageHandler经过configuration参数绑定共享对象。handler对象通常为app内加载webview的控制器实现指定协议,JS端通过window.webKit.messageHandlers发送native消息时,协议方法被调用并传递参数,app端在协议方法根据参数值调用对应原生代码。
JS调用原生代码
- App内WKWebView通过userContentController注入JS。
- JS通过window.webkit.messageHandlers发送native消息,WKScriptMessageHandler代理函数userContentController: didReceiveScriptMessage被执行,App在代理方法中解析参数并调用对应原生代码即可。
原生调用JS代码
- App内WKWebView通过userContentController先注入JS代码或者JS已经实现约定的方法。
- 原生通过调用WKWebView的evaluateJavaScript(_:completionHandler:)方法调用JS代码。