WKWebView 使用时需要
1 | #import <WebKit/WebKit> |
它的使用更加的方便,功能更加的齐全,所以逐步的取代了 UIWebView。
加载方法
加载网页
同 UIWebView 的方法相同
1 | NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"]; |
加载本地文件
加载本地文件的时候不再采用
1 | - (nullable WKNavigation *)loadRequest:(NSURLRequest *)request; |
这个方法,而是采用了新的方法:
1 | NSURL *url = [NSURL fileURLWithPath:@"/Users/ios/Desktop/图片/xxx.jpg"]; |
使用
1 | -(nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessUR; |
这个方法加载本地文件,不会调用发送网络请求的代理。
一些用于网络加载的方法
1 | - (WKNavigation *)loadRequest:(NSURLRequest *)request; |
同网页刷新有关的函数
1 | @property (nonatomic, readonly) BOOL canGoBack; |
- reloadFromOrigin 会比较网络数据是否有变化,没有变化则使用缓存,否则从新请求。
- goToBackForwardListItem:比向前向后更强大,可以跳转到某个指定历史页面
常用的属性
- allowsBackForwardNavigationGestures:BOO L类型,是否允许左右划手势导航,默认不允许
- estimatedProgress:加载进度,取值范围 0~1
- title:页面 title
- scrollView.scrollEnabled:是否允许上下滚动,默认允许
- backForwardList:WKBackForwardList 类型,访问历史列表,可以通过前进后退按钮访问,或者通过 goToBackForwardListItem 函数跳到指定页面
代理协议
1 | #pragma mark - WKNavigationDelegate 代理方法 |
WKWebKit 与 JS 交互
OC 调用 JS
1 | [webView evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable result, NSError * _Nullable error) { |
运行时加载 JS 代码
1 | NSString *js = @"window.alert('欢迎体验WkWebView!');"; |
1 | //在JS端调用alert函数时,会触发此代理方法。 |
上面的3个方法需要在方法需要调用
1 | completionHandler(); |
JS 调用 OC
在 UIWebView 中 JS 调用 OC 可以采用拦截网络请求的方式,当然在 WKWebView 中也可以采用这种方式。但是 WKWebView 提供了一种新特性,叫做 MessageHandler,用它可以很方便的实现 JS 对 OC 的调用。使用方式如下
1 | WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; |
实现 WKScriptMessageHandler 的协议方法
1 | - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message |
实现这种调用的 JS 代码为
1 | window.webkit.messageHandlers.jsMethod.postMessage({longitude:1.00,latitude:20}); |