iOS 8.4.1 破坏了 UIWebView?
iOS 8.4.1 broke UIWebView?
我继承了一个项目,该项目使用不向用户显示的 UIWebView 来加载 HTML 并引用 JS 文件进行计算,并且已经运行了一段时间没有问题。
我已验证 JS 文件和 HTML 以及代码没有改变。
从 iOS 8.4.1 8 月 13 日发布开始,这部分代码的问题开始出现在客户面前。
- (void)loadCompleteHTML:(NSString*)completeHTML {
self.caculateWebView = [[UIWebView alloc] init];
self.caculateWebView.delegate = self;
[self.caculateWebView loadHTMLString:completeHTML baseURL:nil];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) {
//do something with the success
.
.
return NO;
} else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) {
//do something with the fail
.
.
return NO;
}
return YES;
}
它既不返回 "success" 也不返回 "fail",从这个 HTML/JS 中唯一可能得出的两个结论是这两个中的任何一个。
通过记录 request.URL.absoluteString
,我看到 iOS 8.4.1 UIWebView 在加载时突然调用 about:blank
作为第一个 URL。我的解决方案是要求 UIWebView 仅在第一次重新加载。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
BOOL calledForReload = NO;
if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) {
//do something with the success
.
.
return NO;
} else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) {
//do something with the fail
.
.
return NO;
} else if (!calledForReload) {
//call for reload
calledForReload = YES;
[webView reload];
}
return YES;
}
希望我对这个问题的解决方案能帮助像我一样目瞪口呆的人。
我继承了一个项目,该项目使用不向用户显示的 UIWebView 来加载 HTML 并引用 JS 文件进行计算,并且已经运行了一段时间没有问题。
我已验证 JS 文件和 HTML 以及代码没有改变。
从 iOS 8.4.1 8 月 13 日发布开始,这部分代码的问题开始出现在客户面前。
- (void)loadCompleteHTML:(NSString*)completeHTML {
self.caculateWebView = [[UIWebView alloc] init];
self.caculateWebView.delegate = self;
[self.caculateWebView loadHTMLString:completeHTML baseURL:nil];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) {
//do something with the success
.
.
return NO;
} else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) {
//do something with the fail
.
.
return NO;
}
return YES;
}
它既不返回 "success" 也不返回 "fail",从这个 HTML/JS 中唯一可能得出的两个结论是这两个中的任何一个。
通过记录 request.URL.absoluteString
,我看到 iOS 8.4.1 UIWebView 在加载时突然调用 about:blank
作为第一个 URL。我的解决方案是要求 UIWebView 仅在第一次重新加载。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
BOOL calledForReload = NO;
if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) {
//do something with the success
.
.
return NO;
} else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) {
//do something with the fail
.
.
return NO;
} else if (!calledForReload) {
//call for reload
calledForReload = YES;
[webView reload];
}
return YES;
}
希望我对这个问题的解决方案能帮助像我一样目瞪口呆的人。