2017-06-08 7 views
0

URLをクリックしないでUIWebViewのリンクを検出する方法はありますか?たとえば、ページにPDFファイルが自動的にリンクを取得した場合などです。私はこのようにクリックされたURLを検出することができますのWebViewのデリゲートを知っている:クリックせずにリンクを検出するための任意の可能な方法がクリックなしでUIWebViewリンクを検出する

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

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

が、ありますか?

答えて

2

リンクタイプNSTextCheckingResult.CheckingType.linkにはNSDataDetectorを使用できます。あなたは自分の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

UIWebViewHTML bodyを解析し、aタグを探し、およびURLが含まれている彼らのhrefパラメータを取得するにはNSXMLParserを使用してください。

関連する問題