Ios开发学习JS与OC交互iOS开发

IOS浏览控件之WKWebView

2016-11-30  本文已影响2194人  i_belive

WkWebView是IOS8中引入的新组件,苹果将UIWebViewDelegate 与 UIWebView 重构成了 14 个类和 3 个协议并引入了不少新的功能和接口。由于一直以来苹果对于WebView内核封锁的程度是令人发指的,WkWebView的引入无疑是另广大开发者兴奋的事

1、WKWebView介绍

WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API(iOS和OS)。

2、WKWebView新特性

  1. 在性能、稳定性、功能方面有很大提升(最直观的体现就是加载网页是占用的内存,模拟器加载百度与开源中国网站时,WKWebView占用23M,而UIWebView占用85M)
  2. 和 Safari 相同的 JavaScript 引擎,允许JavaScript的Nitro库加载并使用(UIWebView中限制);
  3. 支持了更多的HTML5特性;
  4. 自诩拥有 60fps 滚动刷新率、内置手势、高效的 app 和 web 信息交换通道

3、WKWebView使用

    // 创建webview
    WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
    // 创建请求
    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    // 加载网页
    [webView loadRequest:request];
    // 将webView添加到界面
    [self.view addSubview:webView];

//JS文件路径
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];
//读取JS文件内容
NSString *jsContent = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil];
//创建用户脚本对象,
//WKUserScriptInjectionTimeAtDocumentStart :HTML文档创建后,完成加载前注入,类似于<head>中
//WKUserScriptInjectionTimeAtDocumentEnd :HTML文件完成加载后注入,类似于<body>中
WKUserScript *script = [[WKUserScript alloc] initWithSource:jsContent injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
//添加用户脚本
[webView.configuration.userContentController addUserScript:script];


- WKWebView执行JS方法

//执行JS方法
[webView evaluateJavaScript:@"test()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
//result为执行js方法的返回值
if(error){
NSLog(@"Success");
}else{
NSLog(@"Fail");
}
}];


##4、WKWebView代理方法
- WKNavigationDelegate 协议

pragma mark - WKNavigationDelegate

// 页面开始加载时调用

// 这个方法是服务器重定向时调用,即 接收到服务器跳转请求之后调用

5、WKWebView疑难

问题:http://stackoverflow.com/questions/24882834/wkwebview-not-loading-local-files-under-ios-8
具体参见:https://github.com/shazron/WKWebViewFIleUrlTest

ps:在实际测试中,上述方法在iOS8.0系统中也无法成功。如果在iOS8.0系统有成功的请告知下。谢谢!

上一篇下一篇

猜你喜欢

热点阅读