在 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的主要内容,如果未能解决你的问题,请参考以下文章
如果它进入webview(swift),如何在webview中打开链接
如何在 Swift 中通过 Segue 将数据传递到下一个视图?
在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题