2017-06-08 103 views
0

我想知道是否有任何可能的方式來檢測鏈接UIWebView而不點擊網址?例如,如果頁面有PDF文件自動獲取其鏈接。我知道用的WebView委託我可以檢測到這樣的被點擊的網址:無需點擊即可檢測UIWebView鏈接

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

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

但是否有任何可能的方式來檢測不點擊鏈接?

回答

2

您可以使用NSDataDetector鏈接類型NSTextCheckingResult.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) ?? "" } 
} 

遊樂場測試:

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

這是偉大的!但有沒有任何可能的方式來基於文件過濾鏈接?例如我需要鏈接,其中包含'.pdf' –

+0

是的我需要鏈接,包含文件,如:pdf,mp4,mp3等... –

+0

是的,確實... –

0

使用NSXMLParser解析UIWebViewHTML body,尋找a標籤,並得到他們的href參數包含的URL。