iOS开发之UIWebView 无缝切换到 WKWebView (IMYWebView)

WKWebView 是IOS8新增的 Web浏览视图

优点:   加载速度  比UIWebView提升差不多一倍的, 内存使用上面,反而还少了一半。

缺点:   WKWebView 不支持缓存 和   NSURLProtocol 拦截了

我建议如果对缓存不高的页面可以使用,用户体验会提高很多。

由于项目中以前都是用 UIWebView  而且还要兼容 IOS8  之前的机子。  所以  我创建了一个新类  IMYWebView   你只要全局替换 UIWebView 就能无缝升级到 WKWebView 啦

IMYWebView.h 中的API 会在内部自动支持 UIWebView 和 WKWebView,

title,estimatedProgress 是我认为 WKWebView 中比较有用的新增API

[objc] view plain copy

  1. @interface IMYVKWebView : UIView
  2. ///使用UIWebView
  3. - (instancetype)initWithFrame:(CGRect)frame usingUIWebView:(BOOL)usingUIWebView;
  4. @property(weak,nonatomic)id<IMYVKWebViewDelegate> delegate;
  5. ///内部使用的webView
  6. @property (nonatomic, readonly) id realWebView;
  7. ///是否正在使用 UIWebView
  8. @property (nonatomic, readonly) BOOL usingUIWebView;
  9. ///预估网页加载进度
  10. @property (nonatomic, readonly) double estimatedProgress;
  11. @property (nonatomic, readonly) NSURLRequest *originRequest;
  12. ///back 层数
  13. - (NSInteger)countOfHistory;
  14. - (void)gobackWithStep:(NSInteger)step;
  15. ///---- UI 或者 WK 的API
  16. @property (nonatomic, readonly) UIScrollView *scrollView;
  17. - (id)loadRequest:(NSURLRequest *)request;
  18. - (id)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
  19. @property (nonatomic, readonly, copy) NSString *title;
  20. @property (nonatomic, readonly) NSURLRequest *currentRequest;
  21. @property (nonatomic, readonly) NSURL *URL;
  22. @property (nonatomic, readonly, getter=isLoading) BOOL loading;
  23. @property (nonatomic, readonly) BOOL canGoBack;
  24. @property (nonatomic, readonly) BOOL canGoForward;
  25. - (id)goBack;
  26. - (id)goForward;
  27. - (id)reload;
  28. - (id)reloadFromOrigin;
  29. - (void)stopLoading;
  30. - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler;
  31. ///不建议使用这个办法  因为会在内部等待webView 的执行结果
  32. - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString __deprecated_msg("Method deprecated. Use [evaluateJavaScript:completionHandler:]");
  33. ///是否根据视图大小来缩放页面  默认为YES
  34. @property (nonatomic) BOOL scalesPageToFit;
  35. @end

代码地址 https://github.com/wangyangcc/IMYWebView

时间: 2024-10-25 08:08:09

iOS开发之UIWebView 无缝切换到 WKWebView (IMYWebView)的相关文章

UIWebView 无缝切换到 WKWebView

WKWebView 是IOS8新增的 Web浏览视图 长处:   载入速度  比UIWebView提升差点儿相同一倍的, 内存使用上面,反而还少了一半. 缺点:   WKWebView 不支持缓存 和   NSURLProtocol 拦截了 我建议假设对缓存不高的页面能够使用.用户体验会提高非常多. 因为项目中曾经都是用 UIWebView  并且还要兼容 IOS8  之前的机子.  所以  我创建了一个新类  IMYWebView   你仅仅要全局替换 UIWebView 就能无缝升级到 WK

iOS开发之UIWebView

转自:http://www.cnblogs.com/zhuqil/archive/2011/07/28/2119923.html UIWebView是iOS sdk中一个最常用的控件.是内置的浏览器控件,我们可以用它来浏览网页.打开文档等等.这篇文章我将使用这个控件,做一个简易的浏览器.如下图: 我们创建一个Window-based Application程序命名为:UIWebViewDemo UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLReques

iOS开发之App主题切换完整解决方案(Swift版)

本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了.本篇博客中所涉及的Demo完全使用Swift3.0编写完成,并使用iOS的NSNotification来触发主题切换的动作.本篇博客我们先对我们的主题系统进行设计,然后给出具体实现方式.当然在我们设计本篇博客所涉及的Demo时,我们要遵循"高内聚,低耦合","面向接口编程","便于维护与扩充"等特点. 本篇博

iOS开发之UIWebView自动滑动到顶部-备

但可以通过subview来操作. 通常用UIWebView加载网页,有时候需要点击一个按钮,或者页面的某个部位,使页面自动滚动到顶部,但是UIWebView不像UIScrollView那么方便. UIWebView *currentWebView; if ([currentWebView subviews]) { UIScrollView* scrollView = [[currentWebView subviews] objectAtIndex:0]; [scrollView setConte

iOS开发之UIWebView自动滑动到顶部

UIWebView *currentWebView; if ([currentWebView subviews]) { UIScrollView* scrollView = [[currentWebView subviews] objectAtIndex:0]; [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; }

iOS开发之WKWebView简单使用和常用使用场景

iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版.本着对新事物的好奇,就上网查了一下,但是找了好多个都没说的多了详细,于是就问谷歌,找文档,看看使用方法,试用了一下,果然不错,记录下来,大家分享! WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷

iOS开发之Auto Layout入门

随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享.  什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往Autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 为什么要用Auto Layout? Autolayout能解决不同屏幕(iPhone4,iPhone5,iPad...)之间的适配问题. 在iPhone4时代开发者只需要适

iOS开发之Socket通信实战--Request请求数据包编码模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地 址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索 这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要

ios开发之NavBar和TarBar使用技巧

1  改变NavBar颜色:选中Navigation Bar 的Tint属性.选中颜色. 2  隐藏“back”按钮: self.navigationItem.hidesBackButton = YES; 3 隐藏"NavBar" : self.navigationController.navigationBarHidden = YES; 4 可以不用MainWindow.xib创建的Navigation.在每个view上自定义. 需要把每个控制页都加上以下代码来隐藏nav: -(vo