2017-06-08 3 views
0

Ich frage mich, gibt es einen möglichen Weg, einen Link in UIWebView zu erkennen, ohne auf URLs klicken? zum Beispiel, wenn die Seite PDF Datei automatisch den Link erhalten hat. Ich weiß, mit webview Delegierter Ich klickte Urls wie dies erkennen kann:UIWebView Links ohne Klick erkennen

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

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

aber gibt es eine Möglichkeit, ohne Klick Links zu erkennen?

Antwort

2

Sie können NSDataDetector für die Linktypen NSTextCheckingResult.CheckingType.link verwenden. Sie müssen nur Ihre URL-Daten zum Download und alle Links Spiele von ihm bekommen:

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) ?? "" } 
} 

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

Das ist großartig! Aber gibt es eine Möglichkeit, Links basierend auf einer Datei zu filtern? zum Beispiel brauche ich Link, der ".pdf" enthält –

+0

Ja, ich brauche Links, die Dateien wie: pdf, mp4, mp3 und etc ... enthalten –

+0

Ja, in der Tat ... –

0

Verwenden NSXMLParser die HTML body des UIWebView und sucht a Tags zu analysieren und ihre href Parameter erhalten, die die URL enthält.

Verwandte Themen