无需单击即可检测UIWebView链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无需单击即可检测UIWebView链接相关的知识,希望对你有一定的参考价值。

我想知道是否有任何可能的方法来检测UIWebView中的链接而不点击网址?例如,如果页面有PDF文件自动获取其链接。我知道使用webview的委托我可以检测到这样点击的网址:

  func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
    {

        if navigationType == .linkClicked
        {
            print(request.url?.absoluteString)
        }
        return true
    }

但有没有可能的方法来检测没有点击的链接?

答案

您可以将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]
"
}.resume()
另一答案

使用NSXMLParser解析html bodyUIWebView并查找a标签,并获取包含url的href参数。

以上是关于无需单击即可检测UIWebView链接的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 uiWebView 上 javascript 操作的启动?

当我单击 UIWebView 时,如何在 Safari 中打开链接?

从 UIWebView 启动移动 Safari *无需*修改应用程序源?

UITableView:单击单元格并使用 UIWebView 打开单元格中的链接

UIWebView 无需转到 iOS 的视频播放器即可播放 Html 5 视频

UIWebview 未检测到链接