如何使用 wkwebview 打开 PDF 链接

Posted

技术标签:

【中文标题】如何使用 wkwebview 打开 PDF 链接【英文标题】:How to open a Link to a PDF with wkwebview 【发布时间】:2017-12-11 13:40:44 【问题描述】:

我创建了一个简单的 ios 应用程序,它使用 WKWebView 打开一个 URL。在网站上,有一个 PDF 文档的链接。当我在浏览器上打开该站点时,我可以单击链接,然后打开 PDF 文档。但是在我的应用程序上,当我点击链接时没有任何反应。

我该如何解决?我必须在我的 info.plist 中添加一些东西吗?

【问题讨论】:

【参考方案1】:

SWIFT 3.* & 4.* *

首先您必须将该pdf文件下载到您的应用程序中,下载后您必须获取该文件路径,然后该文件路径应该像WKWebView中的以下方式一样使用。

let fileURL = URL(fileURLWithPath: filePathURLData as! String)
//print(fileURL)
webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)

这里filePathURLData是你下载到你的应用程序的实际文件路径,你必须把它转换成URL,然后你需要将该文件加载到WKWebView

谢谢

希望这会对你有所帮助。

这将显示WKWebView 中的任何文件(doc、docx、xlsx、pdf、google doc、页面和任何文本文件)

【讨论】:

进入网站,有不止一个pdf文档的链接,不知道用了哪些链接。 @Mondy 无论您想在WKWebView 中显示什么链接,您都必须先下载它。 但如果我不知道链接,这是不可能的。我重定向到包含一个或多个链接的外部站点。是否可以让它在应用程序外打开到标准浏览器? @Mondy 我认为它可以在 safari、chrome 或任何其他网络浏览器中打开,但要在 WKWebView 中打开您的应用程序中的文件,您必须按照上述操作。 你有什么想法,如何用标准浏览器打开链接?【参考方案2】:

很可能,您在锚标记中使用了 target="_blank"。这会打开一个新窗口来显示链接。 WKWebView 正在阻止您尝试打开新窗口(至少默认情况下)。

下面的代码仍然没有创建新窗口,而是在当前 WKWebView 中打开 PDF 等链接。 另一个选项似乎是创建一个新的 WKWebView 并将其返回,因此 ios 并在其中打开链接,但我不希望每次点击 WKWebView 内的网站时都会创建额外的视图。

在您的 ViewController.viewDidLoad 中

webView.uiDelegate = self

然后为委托添加扩展名

extension ViewController: WKUIDelegate 

    /**
     * Force all popup windows to remain in the current WKWebView.  
     * By default, WKWebView is blocking new windows from being created
     * ex <a href="link" target="_blank">text</a>.
     * This code catches those popup windows and displays them in the current WKWebView.
     */
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? 

        // open in current view
        webView.load(navigationAction.request)

        // don't return a new view to build a popup into (the default behavior).
        return nil;
    

【讨论】:

谢谢,您的回答对我有帮助。现在我想下载那个 pdf 我该怎么做?【参考方案3】:

我有同样的问题,发现 pdf 文件使用的是不安全的http。因此应用程序拒绝打开它。 尝试使用https 链接检查它是否有效。

同样使用WKWebView,您无需在打开之前下载 pdf 文件。直接加载url,即

webView.load(URLRequest(url: URL(string: "https-pdf-link")!))

【讨论】:

【参考方案4】:

目标 C:

 NSURL *fileUrl = [[NSURL alloc] initWithString:filePathURLData];
[webView loadFileURL:fileUrl allowingReadAccessToURL:fileUrl];

另一种打开保存在文档目录中的PDF的方法:

 NSData *data = [NSData dataWithContentsOfFile:fileURL];
[webView loadData:data MIMEType:@"application/pdf" characterEncodingName:@"" baseURL:[NSURL URLWithString:fileURL]]; 

【讨论】:

以上是关于如何使用 wkwebview 打开 PDF 链接的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用

在 iOS 10 上的 WKWebView 中打开 PDF 文件时启用捏合缩放手势

当在 WKWebView 中加载链接时,我如何知道外部应用程序是不是会打开?

无法使用 WKWebView 在 Safari 中打开外部链接

禁用 WKWebView 以打开链接以重定向到我的 iPhone 上安装的应用程序

从 WKWebView 调用时,无法使用 JavaScript 在移动 Safari 中打开链接