我知道iOS10中的UIWebView已过时,您应该使用WKWebView。但是,这是一个巨大的项目,我只是接手解决了一些错误,并且无法重建所有内容。
因此,在iOS9、8等平台上,它运行完美,我们什么也没做。现在我们有一个奇怪的错误。我们尝试从公司的Intranet网站下载一些文档。用户凭据输入到应用程序中,并通过发布请求发送到其服务器。整个登录步骤会将用户转发到另外两个链接,直到完成所有cookie和登录步骤。然后将调用并下载包含文档的几个链接。
我认为我们的问题在于登录步骤和转发。这些是我们代码的一些“补丁”:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"should start - %@, nav type %ld", request.URL.absoluteString, (long)navigationType);
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"webViewDidStartLoad is called: %ld", (long)self.webViewLoads + 1);
self.webViewLoads ++;
}
*/
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if(![self isManualLoginAndImportRequired]){
NSLog(@"WebViewLoads: %ld", (long)self.webViewLoads);
NSLog(@"isLoading: %df", webView.isLoading);
NSLog(@"loading: %df", webView.loading);
self.webViewLoads --;
if(webView.isLoading || self.webViewLoads > 0) {
return;
}
if(webView.isLoading) {
return;
}
if (webView.loading) {
return;
}
我要显示的内容:只有一个链接(登录链接)被调用。然后,在登录步骤的每个“前进”期间,在webViewDidStartLoad中,变量self.webViewLoads都会增加一个(self.webViewLoads ++)。为了确定何时真正完成了登录步骤,每次调用webViewDidFinishLoad时都会减小此变量。如前所述,在iOS9中效果很好。但是,在iOS10中,此变量不会递减,只能在最后一次转发后调用。因此,我们永远不会执行webViewDidFinishLoad中的相关代码。 我试图不理会这个变量self.webViewLoads,并且在大多数情况下甚至可以工作。但是在另一些情况下,它会产生错误。
所以我的问题是:为什么在两者之间不再调用webViewDidFinishLoad?对iOS10做了哪些更改,或者我缺少其他变量?