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,不加载本地文件

WKWebview 的 javascript 调用返回 nil

如何阻止外部资源加载WKWebView?

与 UIWebView 相比,WKWebView 重定向问题