
1WKWebView 是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的UIWebView 和 AppKit 中的 WebView,提供了统一的跨双平台 API。
2自诩拥有 60fps 滚动刷新率、内置手势、高效的 app 和 web 信息交换通道、和 Safari 相同的 JavaScript 引擎,WKWebView 毫无疑问地成为了 WWDC 2014 上的最亮点。
3UIWebView & UIWebViewDelegate 这个两个东西是如何在 WKWebKit 中被重构成 14 个类 3 个协议的呢。
4 WKWebKit Framework
Classes
WKBackForwardList: 之前访问过的 web 页面的列表,可以通过后退和前进动作来访问到。
WKBackForwardListItem: webview 中后退列表里的某一个网页。
WKFrameInfo: 包含一个网页的布局信息。
WKNavigationAction: 包含可能让网页导航变化的信息,用于判断是否做出导航变化。
WKNavigationResponse: 包含可能让网页导航变化的返回内容信息,用于判断是否做出导航变化。
WKPreferences: 概括一个 webview 的偏好设置。
WKProcessPool: 表示一个 web 内容加载池。
WKUserContentController: 提供使用 JavaScript post 信息和注射 script 的方法。
WKScriptMessage: 包含网页发出的信息。
WKUserScript: 表示可以被网页接受的用户脚本。 > -WKWebViewConfiguration: 初始化 webview 的设置。
WKWindowFeatures: 指定加载新网页时的窗口属性。
Protocols
WKNavigationDelegate: 提供了追踪主窗口网页加载过程和判断主窗口和子窗口是否进行页面加载新页面的相关方法。
WKScriptMessageHandler: 提供从网页中收消息的回调方法。
WKUIDelegate: 提供用原生控件显示网页的方法回调。
1、将html文件夹拖入项目根目录下,选择引用(蓝色文件夹)
2、获取indexhtml所在的路径
3、webView调用loadFileURL:allowingReadAccessToURL:方法加载
如果需要拼接额外参数,需要手动拼接地址,直接用fileURLWithPath生成的链接,会进行编码
NSString basePath = [NSString stringWithFormat: @"%@/%@", [[NSBundle mainBundle] bundlePath], @"indexhtml所在的文件夹"];
NSURL baseUrl = [NSURL fileURLWithPath: basePath isDirectory: YES];
NSString filePath = [NSString stringWithFormat: @"file://%@/indexhtml#/xxx=%@&sss=%@", basePath, @"xxx", @"sss"];
NSURL fileUrl = [NSURL URLWithString: filePath];
[_webView loadFileURL: fileUrl allowingReadAccessToURL: baseUrl];
android中只需要给webView注册一个事件即可实现加载进度。
以下是具体实现代码:
1从webView中获取设置
WebSettings sws = webViewgetSettings();
swssetSupportZoom(true);
swssetBuiltInZoomControls(true);
webViewsetInitialScale(25);
webViewgetSettings()setUseWideViewPort(true);
2注册setWebChromeClient事件
webViewsetWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
// Activity和Webview根据加载程度决定进度条的进度大小
// 当加载到100%的时候 进度条自动消失
//WebViewProgressActivitythissetTitle("Loading");
//WebViewProgressActivitythissetProgress(progress 100);
if (progress == 100) {
progressBarsetVisibility(ViewGONE);
//WebViewProgressActivitythissetTitle("完成");
}
}
});
3注意在onProgressChanged中处理进度,progress就是进度值。
我们看视频或者加载网页的时候,当画面还没出来的时候页面会显得比较单调,所以我们一般用一个进度条或者是一个小菊花转动来缓解网页加载不出来的尴尬,本文就是系统自带的一个小菊花效果
#import"ViewControllerh"
@interfaceViewController()
@property(nonatomic,retain)UIActivityIndicatorViewactivity;
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
//创建小菊花
selfactivity= [[UIActivityIndicatorViewalloc]initWithFrame:CGRectMake(150,100,50,50)];
//小菊花的风格
[selfactivitysetActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
//小菊花的颜色
selfactivitycolor= [UIColor redColor];
//hidesWhenStopped
selfactivityhidesWhenStopped=NO;
//将小菊花添加到主视图
[selfviewaddSubview:selfactivity];
//用一个Button来触发小菊花的效果
UIButtonbutton = [UIButtonbuttonWithType:UIButtonTypeSystem];
buttonframe=CGRectMake(150,400,100,100);
buttonbackgroundColor= [UIColorblackColor];
[selfviewaddSubview:button];
[buttonaddTarget:selfaction:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];
}
-(void)buttonAction:(UIButton)button{
if([selfactivityisAnimating]) {
[selfactivitystopAnimating];
}else{
[selfactivitystartAnimating];
}
}
可以调用自带浏览器 safari
在点击事件中(记得设置代理,后面在代理方法中做事情)
Done 按钮
这中方法是大多开发者选择的,是对于UIWebView升级版本,添加功能,可以监听进度,实现进度条功能,还可以做一系列的缓存
首先用个属性来强引用这个webView
控制网页的前进
[selfwebView goForward];
控制网页的后退
[selfwebView goBack];
控制网页的刷新
[selfwebView goForward];
自定义实现Safari的类似功能:
可以自己创建一个控件Progress放在导航栏的下面,然后初始化的时候使progress = 0;然后通过```KVO``监听webView中各个属性的变化,从而空时前进、后退这些按钮的编辑状态
可以及时的改变前进、后退、进度条等的状态
这样就可以完美实现网页加载功能,还可以自定义网页的显示样式,有进度条,前进,后退刷新功能,完全可以在项目中封装一个通用的webView,可谓是一劳永逸
以上就是关于ios uiwebview和wkwebview的区别全部的内容,包括:ios uiwebview和wkwebview的区别、iOS WKWebView加载本地html、android中webview 怎么实现网页加载时显示加载进度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)