在 Swift 中通过 WebView 下载 .pdf 或 .ppt

Posted

技术标签:

【中文标题】在 Swift 中通过 WebView 下载 .pdf 或 .ppt【英文标题】:Download .pdf or .ppt by WebView in Swift 【发布时间】:2019-02-17 22:33:07 【问题描述】:

我正在使用“webview”组件来访问该网站。在网站的未确定部分,我们有 .pdf 和 .ppt 格式的文件。 当用户单击它们时,我可以下载这些文件吗?今天,应用程序只打开了.pdf和.ppt,但我想下载它。

我的代码在 pt_BR 中。

class PortalAcademicoViewController: UIViewController 


    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() 
        super.viewDidLoad()

        carregaSite()

    


    func carregaSite()
        /*
        let url = URL(string: "")
        var urlRequest = URLRequest(url: url!)
        urlRequest.cachePolicy = .returnCacheDataElseLoad
        webView.loadRequest(urlRequest) */


        //carregar o arquivo html
        let htmlFile = Bundle.main.path(forResource: "portalacademico", ofType: "html")
        let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
        HTTPCookieStorage.shared.cookieAcceptPolicy = .always
        self.webView.frame = self.view.bounds
        webView.loadHTMLString(html!, baseURL: Bundle.main.resourceURL)

        //voltar e avançar entres as paginas do webview
        let swipeLeftRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(recognizer:)))
        let swipeRightRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(recognizer:)))

        swipeLeftRecognizer.direction = .left
        swipeRightRecognizer.direction = .right

        webView.addGestureRecognizer(swipeLeftRecognizer)
        webView.addGestureRecognizer(swipeRightRecognizer)
        //fim

    



    //trabalhando com avançar e voltar webview
    @objc private func handleSwipe(recognizer: UISwipeGestureRecognizer) 
        if (recognizer.direction == .left) 
            if webView.canGoForward 
                webView.goForward()
            
        

        if (recognizer.direction == .right) 
            if webView.canGoBack 
                webView.goBack()
            
        
    
    //FIM


【问题讨论】:

您应该始终用英文编写代码。 【参考方案1】:

我认为您应该使用 javascript 执行下载任务。 检查您在 func webView(_ webView: WKWebView, decisionPolicyFor navigationAction ...) 中的请求,如果找到下载请求,请调用 javascript 方法。

这里有人已经用 wkwebview 完成了 pdf 下载。

https://forums.developer.apple.com/thread/108394

【讨论】:

【参考方案2】:

您可以将UIWebViewDelegate 设置为您的WebView 并检查webViewShouldStartLoadWithRequest 中的PDF 和PPT 文件。每次用户点击链接时都会调用webViewShouldStartLoadWithRequest

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool 

    if request for a PPT or PDF file 
        downloadFile()
        return false
    
    return true

https://developer.apple.com/documentation/uikit/uiwebviewdelegate/1617945-webview?language=objc

旁注:您当前正在使用已弃用的 UIWebView。您应该考虑改用 WKWebView。

【讨论】:

【参考方案3】:

使用 WKWebView 下载 .pdf 和 .ppt 或任何特定文件,在此处查看我的解决方案

https://***.com/a/60614921/1025070

【讨论】:

以上是关于在 Swift 中通过 WebView 下载 .pdf 或 .ppt的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中通过webview下载/创建pdf

如果它进入webview(swift),如何在webview中打开链接

如何在 Swift 中通过 Segue 将数据传递到下一个视图?

android中通过kotlin使用WebView

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题