UIWebView 无缝切换到 WKWebView
2016-07-16 10:49
417 查看
WKWebView 是IOS8新增的 Web浏览视图
优点: 加载速度 比UIWebView提升差不多一倍的, 内存使用上面,反而还少了一半。
缺点: WKWebView 不支持缓存 和 NSURLProtocol 拦截了
我建议如果对缓存不高的页面可以使用,用户体验会提高很多。
由于项目中以前都是用 UIWebView 而且还要兼容 IOS8 之前的机子。 所以 我创建了一个新类 IMYWebView 你只要全局替换 UIWebView 就能无缝升级到 WKWebView 啦
IMYWebView.h 中的API 会在内部自动支持 UIWebView 和 WKWebView,
title,estimatedProgress 是我认为 WKWebView 中比较有用的新增API
[objc] view
plain copy
@interface IMYVKWebView : UIView
///使用UIWebView
- (instancetype)initWithFrame:(CGRect)frame usingUIWebView:(BOOL)usingUIWebView;
@property(weak,nonatomic)id<IMYVKWebViewDelegate> delegate;
///内部使用的webView
@property (nonatomic, readonly) id realWebView;
///是否正在使用 UIWebView
@property (nonatomic, readonly) BOOL usingUIWebView;
///预估网页加载进度
@property (nonatomic, readonly) double estimatedProgress;
@property (nonatomic, readonly) NSURLRequest *originRequest;
///back 层数
- (NSInteger)countOfHistory;
- (void)gobackWithStep:(NSInteger)step;
///---- UI 或者 WK 的API
@property (nonatomic, readonly) UIScrollView *scrollView;
- (id)loadRequest:(NSURLRequest *)request;
- (id)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly) NSURLRequest *currentRequest;
@property (nonatomic, readonly) NSURL *URL;
@property (nonatomic, readonly, getter=isLoading) BOOL loading;
@property (nonatomic, readonly) BOOL canGoBack;
@property (nonatomic, readonly) BOOL canGoForward;
- (id)goBack;
- (id)goForward;
- (id)reload;
- (id)reloadFromOrigin;
- (void)stopLoading;
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler;
///不建议使用这个办法 因为会在内部等待webView 的执行结果
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString __deprecated_msg("Method deprecated. Use [evaluateJavaScript:completionHandler:]");
///是否根据视图大小来缩放页面 默认为YES
@property (nonatomic) BOOL scalesPageToFit;
@end
代码地址
优点: 加载速度 比UIWebView提升差不多一倍的, 内存使用上面,反而还少了一半。
缺点: WKWebView 不支持缓存 和 NSURLProtocol 拦截了
我建议如果对缓存不高的页面可以使用,用户体验会提高很多。
由于项目中以前都是用 UIWebView 而且还要兼容 IOS8 之前的机子。 所以 我创建了一个新类 IMYWebView 你只要全局替换 UIWebView 就能无缝升级到 WKWebView 啦
IMYWebView.h 中的API 会在内部自动支持 UIWebView 和 WKWebView,
title,estimatedProgress 是我认为 WKWebView 中比较有用的新增API
[objc] view
plain copy
@interface IMYVKWebView : UIView
///使用UIWebView
- (instancetype)initWithFrame:(CGRect)frame usingUIWebView:(BOOL)usingUIWebView;
@property(weak,nonatomic)id<IMYVKWebViewDelegate> delegate;
///内部使用的webView
@property (nonatomic, readonly) id realWebView;
///是否正在使用 UIWebView
@property (nonatomic, readonly) BOOL usingUIWebView;
///预估网页加载进度
@property (nonatomic, readonly) double estimatedProgress;
@property (nonatomic, readonly) NSURLRequest *originRequest;
///back 层数
- (NSInteger)countOfHistory;
- (void)gobackWithStep:(NSInteger)step;
///---- UI 或者 WK 的API
@property (nonatomic, readonly) UIScrollView *scrollView;
- (id)loadRequest:(NSURLRequest *)request;
- (id)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly) NSURLRequest *currentRequest;
@property (nonatomic, readonly) NSURL *URL;
@property (nonatomic, readonly, getter=isLoading) BOOL loading;
@property (nonatomic, readonly) BOOL canGoBack;
@property (nonatomic, readonly) BOOL canGoForward;
- (id)goBack;
- (id)goForward;
- (id)reload;
- (id)reloadFromOrigin;
- (void)stopLoading;
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler;
///不建议使用这个办法 因为会在内部等待webView 的执行结果
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString __deprecated_msg("Method deprecated. Use [evaluateJavaScript:completionHandler:]");
///是否根据视图大小来缩放页面 默认为YES
@property (nonatomic) BOOL scalesPageToFit;
@end
代码地址
相关文章推荐
- Android APP性能优化技巧
- Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码
- Android学习笔记(二)
- Android NDK开发Crash错误定位
- EventBus3.0源码解析
- android项目之记事本-1(已上线)
- android笔记
- appcan开发经验总结
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 自定义边缘拖动阴影的颜色
- Android Button 大写
- 利用Androidstudio开发Java工程图文详解
- Android中onConfigurationChanged未被调用的解决方法
- App架构经验总结
- Android消息推送
- Android开发--CardView使用
- 【干货】移动APP安全测试要点解析
- greenDao框架浅入深出 2
- iOS attributeString 换行
- Android之ViewPage懒加载