【问题标题】:Links in PDF displayed in WKWebView not working after UIWebView migrationUIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用
【发布时间】: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


    【解决方案1】:

    尝试修改if条件并检查是否有效

    if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
       [[UIApplication sharedApplication] openURL:requestUrl];
       decisionHandler(WKNavigationActionPolicyCancel);
       return;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2016-09-27
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多