我想知道有没有办法在没有点击网址的情况下检测UIWebView
中的链接?例如,如果页面有PDF
文件自动获取其链接。我知道使用webview代理我可以检测到这样点击的网址:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
{
if navigationType == .linkClicked
{
print(request.url?.absoluteString)
}
return true
}
但是有没有办法在没有点击的情况下检测链接?
答案 0 :(得分:2)
您可以将NSDataDetector用于链接类型NSTextCheckingResult.CheckingType.link
。您只需要下载您的网址数据并从中获取所有链接匹配:
extension String {
var detectURLs: [URL] {
return (try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue))?
.matches(in: self, range: NSRange(location: 0, length: utf16.count))
.compactMap{ $0.url } ?? []
}
}
extension Data {
var string: String { return String(data: self, encoding: .utf8) ?? "" }
}
游乐场测试:
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
// add the extensions above here
URLSession.shared.dataTask(with: URL(string: "http://www.example.com/downloads/")!) { data, response, error in
guard let data = data, error == nil else { return }
let pdfs = data.string.detectURLs.filter{$0.pathExtension.lowercased() == "pdf"}
print(pdfs) // print(urls) // "[http://www.sample-videos.com/pdf/Sample-pdf-5mb.pdf]\n"
}.resume()
答案 1 :(得分:0)
使用NSXMLParser
解析HTML body
的{{1}}并查找UIWebView
代码,并获取包含该网址的a
参数。