【发布时间】:2020-11-18 17:24:57
【问题描述】:
我最近从使用 UIWebView 迁移到了 WKWebView。我很难让我的应用程序以与以前相同的方式运行。当点击 PDF 中的链接时,它曾经转到另一个视图控制器,但由于迁移链接根本不起作用。
该应用程序用于检查使用if (navigationType == UIWebViewNavigationTypeLinkClicked) 按下的链接,但是在将其替换为if (navigationAction.navigationType == WKNavigationTypeLinkActivated) 后,当链接被按下时,它永远不会进入语句。
当尝试单击链接时,我在控制台中得到以下信息:
WebPageProxy::didFailProvisionalLoadForFrame: frameID = 3, domain = NSURLErrorDomain, code = -1002
我最新的 WKWebView 代码:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL *requestUrl = [NSURL URLWithString:[navigationAction.request.URL query]];
if ([[requestUrl absoluteString] hasPrefix:@"ios:"]) {
NSRange start = [[requestUrl absoluteString] rangeOfString:@"ios:webToNativeCall_STAR_ID_"];
NSString *webRowId;
if (start.location != NSNotFound) {
webRowId = [[requestUrl absoluteString] substringFromIndex:start.length];
}
// Call the given selector
[self performSelector:@selector(webToNativeCall:) withObject:webRowId];
}
else {
[self _saveSearch];
}
if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
// FOLLOWING LINE NEVER CALLED
[[UIApplication sharedApplication] openURL:requestUrl options:[NSDictionary new] completionHandler:nil];
}
decisionHandler(WKNavigationActionPolicyAllow);
}
旧 UIWebView 代码:
//- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
// navigationType:(UIWebViewNavigationType)navigationType {
//
// if ([[[request URL] absoluteString] hasPrefix:@"ios:"]) {
//
// NSRange start = [[[request URL] absoluteString] rangeOfString:@"ios:webToNativeCall_STAR_ID_"];
// NSString *webRowId;
// if (start.location != NSNotFound) {
// webRowId = [[[request URL] absoluteString] substringFromIndex:start.length];
// }
//
// // Call the given selector
// [self performSelector:@selector(webToNativeCall:) withObject:webRowId];
// // Cancel the location change
// return NO;
// }
// else {
// [self _saveSearch];
// }
// if ( navigationType == UIWebViewNavigationTypeLinkClicked ) {
// [[UIApplication sharedApplication] openURL:[request URL]
// options:[NSDictionary new]
// completionHandler:nil];
// return NO;
// }
//
// return YES;
//
//}
【问题讨论】:
标签: ios objective-c wkwebview