我的应用程序使用WKWebView导航到移动网页。我在寻找的是如何检查网页是否可下载(例如.csv或.pdf)。现在,我正在做一些黑客来阅读URL,但我知道必须有更优雅的方式。如何使用WKWebView读取页面的MIME类型?
我正在使用WKNavigationDelegate - 任何人都可以提供一些有关如何判断一个页面是否提供可下载内容的信息?或者我如何阅读一种“文本/ csv”?
请让我知道,如果我可以澄清。
我的应用程序使用WKWebView导航到移动网页。我在寻找的是如何检查网页是否可下载(例如.csv或.pdf)。现在,我正在做一些黑客来阅读URL,但我知道必须有更优雅的方式。如何使用WKWebView读取页面的MIME类型?
我正在使用WKNavigationDelegate - 任何人都可以提供一些有关如何判断一个页面是否提供可下载内容的信息?或者我如何阅读一种“文本/ csv”?
请让我知道,如果我可以澄清。
您可以使用框架Swime。您可以使用这样的:
import Swime
let path = "/path/to/some-file.jpg"
let url = URL(fileURLWithPath: path, isDirectory: false)
let data = try! Data(contentsOf: url)
let mimeType = Swime.mimeType(data: data)
mimeType?.type == .jpg // true
mimeType! // MimeType(mime: "image/jpeg", ext: "jpg", type: .jpg)
switch mimeType?.type {
case .jpg?:
....
case .png?:
....
case .wmv?:
....
case ...
}
这里可MimeTypeExtension
列表:
public enum MimeTypeExtension {
case amr
case ar
case avi
case bmp
case bz2
case cab
case cr2
case crx
case deb
case dmg
case eot
case epub
case exe
case flac
case flif
case flv
case gif
case gz
case ico
case jpg
case jxr
case lz
case m4a
case m4v
case mid
case mkv
case mov
case mp3
case mp4
case mpg
case msi
case mxf
case nes
case ogg
case opus
case otf
case pdf
case png
case ps
case psd
case rar
case rpm
case rtf
case sevenZ // 7z, Swift does not let us define enum that starts with a digit
case sqlite
case swf
case tar
case tif
case ttf
case wav
case webm
case webp
case wmv
case woff
case woff2
case xpi
case xz
case z
case zip
}
你应该能够检查响应和页面加载之前获得的MIME类型,使用webView(_:decidePolicyFor:decisionHandler:)
方法您的WKNavigationDelegate
。
设置对象为navigationDelegate
您WKWebView,并给它这样的方法:
func webView(_ webView: WKWebView,
decidePolicyFor navigationResponse: WKNavigationResponse,
decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
if let mimeType = navigationResponse.response.mimeType {
// do some thing with the MIME type
} else {
// response has no MIME type, do some special handling
}
decisionHandler(.allow)
}
我的服务器端可能存在问题,因为即使该URL具有可下载的.csv,仍会记录“html/text”的mimeType。它通过后端路由。 – ArielSD
@ArielSD你可以检查mimeType是否为“html/text”,url pathExtension ==“csv”https://stackoverflow.com/questions/36231061/wkwebview-open-links-from-certain-domain-in-safari /36231713?s=1|5.4860#36231713 –
虽然这很好,但我们试过了:指向.csv的链接没有像这样的扩展名。 – ArielSD
感谢您的快速反应。这看起来像是假定该文件已经下载 - 你知道一种在WKWebView中使用页面做类似事情的方法吗?我想检查页面是否可下载,如果可以,请下载内容。那有意义吗? – ArielSD
@ArielSD,现在我知道了。结帐[this](https://stackoverflow.com/a/40003309/5576310)然后发布。这是你需要的吗? –
是的 - 这是我迄今为止最接近的,谢谢! – ArielSD