检测UIWebView链接,无需点击

我想知道是否有任何可能的方式来检测链接在UIWebView没有点击url? 例如,如果页面有PDF文件自动获取其链接。 我知道与webview的委托,我可以检测点击这样的url:

  func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == .linkClicked { print(request.url?.absoluteString) } return true } 

但有没有任何可能的方式来检测链接没有点击?

您可以使用NSDataDetector链接typesNSTextCheckingResult.CheckingType.link 。 你只需要下载你的url数据,并从中得到所有的链接匹配:

 extension String { var detectURLs: [URL] { return (try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue))? .matches(in: self, range: NSRange(location: 0, length: utf16.count)) .flatMap{ $0.url } ?? [] } } extension Data { var string: String { return String(data: self, encoding: .utf8) ?? "" } } 

游乐场testing:

 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() 

使用NSXMLParser来parsingUIWebViewHTML body并查找标签,并获取其包含url的href参数。