UIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用
Posted
技术标签:
【中文标题】UIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用【英文标题】:Links in PDF displayed in WKWebView not working after UIWebView migration 【发布时间】: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;
//
//
【问题讨论】:
【参考方案1】:尝试修改if条件并检查是否有效
if (navigationAction.navigationType == WKNavigationTypeLinkActivated)
[[UIApplication sharedApplication] openURL:requestUrl];
decisionHandler(WKNavigationActionPolicyCancel);
return;
【讨论】:
以上是关于UIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用的主要内容,如果未能解决你的问题,请参考以下文章
将 iOS Hybrid App 从 UIWebView 迁移到 WKWebview
无法使用 WKWebView 在 Safari 中打开外部链接
在 WKWEBVIEW 上更新后出现问题 Cordova App iOS,不加载本地文件