如何使用wkwebview打开PDF链接

11

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

我该怎么解决?我需要在我的info.plist中添加什么吗?

4个回答

11

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文档、Pages和任何文本文件)


2
网站中有多个PDF文档链接,我不知道哪些链接被使用了。 - Mondy
1
@Mondy 无论您想在WKWebView中显示什么链接,您都必须先下载它。 - Abhishek Mitra
1
但如果我不知道链接,这是不可能的。我会重定向到一个包含一个或多个链接的外部网站。 是否可以让它在应用程序之外的标准浏览器中打开? - Mondy
1
@Mondy 我认为它可以在Safari、Chrome或任何其他Web浏览器中打开,但要在WKWebView中打开应用程序中的文件,您必须遵循上述步骤。 - Abhishek Mitra
2
你有任何想法吗?怎样可以使用标准浏览器打开链接? - Mondy
有没有办法在不事先知道链接的情况下打开它...?所以,如果我使用wkwebview打开一个页面,而该页面上有一个指向pdf的链接,那么你什么也做不了...? - Code Wiget

6
很可能你在锚点标签中使用了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文件,我该怎么做? - Yogendra Patel

2

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

另外,使用 WKWebView,您无需在打开之前下载 PDF 文件。只需直接加载 URL 即可,例如:

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

1

Objective 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]]; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接