美文网首页
WKWebView 填坑之路小结

WKWebView 填坑之路小结

作者: 四季的风 | 来源:发表于2017-05-24 11:06 被阅读0次

前言

公司因业务调整,需要使用h5页面,以前使用的webview在这次改革中因出现bug被淘汰了,于是我就开始苦逼的填坑之路.借此记录我的辛路历程(吐槽历程)....

正文

关于webview与wkwebview的区别,百度比比皆是,我就不多陈述.

填坑一:

   在项目中改用wkwebview加载页面,页面只显示在屏幕的左上角(屏幕的1/4处),其余部分空白.而在我的测试demo中显示正常.(抓狂中.....).百度的很多都没解决方法.于是使用笨方法,在以前备份的项目中新建一个viewcontroller加载页面,竟奇迹般的好了.....无语中...求解惑...

填坑三:无网络或服务器异常情况下加载本地页面(以下的本地页面放在同一路径下)

   页面加载失败会执行代理方法是:

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(nonnull NSError *)error;

填坑三:iOS 9加载本地页面的问题

iOS 9推出的加载本地页面的方法,加载页面没有效果.(无解...彻底崩溃)只能另辟他路:

NSString *path = [[NSBundle mainBundle] pathForResource:@"404" ofType:@"html"];

NSString * str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

[_webView loadHTMLString:str baseURL:[NSBundle mainBundle].resourceURL];

填坑四:iOS 8加载本地页面的问题

在iOS 8的环境下使用上面的代码页面呈缩小状态(无解...).另辟他路:

NSURL *pathUrl = [[NSBundle mainBundle] URLForResource:@"404" withExtension:@"html"];

[self.webView loadRequest:[NSURLRequest requestWithURL:pathUrl]];

填坑五:由四坑引起的页面不显示的坑

在收到响应决定跳转的代理方法中判断条件不足导致,完整判断如下:

/* 3.在收到服务器的响应头,根据response相关信息,决定是否跳转。 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{

NSString *urlstring = [navigationResponse.response.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlstring];

NSString *urlhost = [url host];

NSString *comhost = @"项目网址的host";

NSError *error = nil;

if (![urlhost hasPrefix:comhost] && [[[url scheme] lowercaseString] isEqualToString:@"http"]){

decisionHandler(WKNavigationResponsePolicyCancel);

[self loadFailViewWithError:error];

}else{

decisionHandler(WKNavigationResponsePolicyAllow);

}}

填坑六:由五坑引起的点击页面上的刷新按钮,一直刷新的坑

在失败的代理方法中未做判断,导致无网络状态下点击,产生死循环.唉(还是太菜啊)

添加判断如下:

- (void)loadFailViewWithError:(NSError *)error{

[[LoadingTool shareLoadingTool] hideLoadingViewFromView:self.view];

NSDictionary *userinfo = error.userInfo;

NSURL *url = [NSURL URLWithString:userinfo[@"NSErrorFailingURLStringKey"]];

if ([[[url scheme] lowercaseString] isEqualToString:@"http"]){

NSString *path = [[NSBundle mainBundle] pathForResource:@"404" ofType:@"html"];

if(path){if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {

NSString * str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

[_webView loadHTMLString:str baseURL:[NSBundle mainBundle].resourceURL];

}else {

NSURL *pathUrl = [[NSBundle mainBundle] URLForResource:@"404" withExtension:@"html"];

[self.webView loadRequest:[NSURLRequest requestWithURL:pathUrl]];}}}}

这是目前为止遇到的所有坑,以上只是我个人贱解,欢迎大家指教!同时也欢迎大家给出更多的填坑之法.

学习的榜样:

blog.csdn.net/chenyong05314/article/details/53735215

www.brighttj.com/ios/ios-wkwebview-new-features-and-use.html

www.cnblogs.com/NSong/p/6489802.html

相关文章

  • WKWebView 填坑之路小结

    前言 公司因业务调整,需要使用h5页面,以前使用的webview在这次改革中因出现bug被淘汰了,于是我就开始苦逼...

  • 填坑之路

    总有一点东西,用一次查一次,查一次忘一次 IE 11不兼容VUE Babel 默认只转换新的 JavaScript...

  • 【WKWebview填坑(一)】WKWebview 添加User

    网上好多WKWebview的方法都差不多而且基本都是错的,下面是我自己整理的添加User-Agent的方法,兼容i...

  • WKWebView填坑记录20170118

    1.WKWebView runJavaScriptAlertPanelWithMessage crash from...

  • WKWebView填坑之----缓存

    这个也是实际中遇到的问题,前端修改后发现再加载页面还是之前未修改的页面,第一反应就是缓存的问题,之前用UIWebV...

  • 近期填坑小结

    最近工作中碰到了一些问题,翻翻查查的都解决了,也学到了一些东西,记录下来备忘吧。 1、断点调试时变量值都为nil,...

  • UITableView嵌套WKWebView的那些坑

    UITableView嵌套WKWebView的那些坑 UITableView嵌套WKWebView的那些坑

  • ReactNative填坑之路

    一.ViewPagerAndroid之坑 举个栗子, 然而在HotSaleLis这个Component里面就不能超...

  • 填坑之路:JSTL

    一、什么是JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能,它是apa...

  • idea 填坑之路

    1、jdk与jetty有版本匹配的问题,如果版本不匹配会出现不能识别jsp的错误。 jdk1.8匹配的jett...

网友评论

      本文标题:WKWebView 填坑之路小结

      本文链接:https://www.haomeiwen.com/subject/mimnxxtx.html