2014-09-22 6 views
6

In UIWebView, war es ziemlich einfach UIDataDetectorTypes zu einer Ansicht hinzuzufügen:WKWebKit: Nein dataDetectorTypes Parameter

myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 

Und so weiter. WKWebView scheint jedoch keine ähnliche Eigenschaft zu haben. This Bezug erwähnt, dass es auf die WKWebViewConfiguration Eigenschaft bei myWebKitView.configuration verschoben wurde, aber sowohl die official documentation und die Header selbst machen keinen Bezug auf dataDetectorTypes.

Ich versuche derzeit eine App von UIWebView zu WKWebView zu migrieren, und diese App verfügt derzeit über benutzerkonfigurierbare UIDataDetectorTypes. Also, gibt es eine Möglichkeit, dies mit der bereitgestellten API zu implementieren, oder müsste ich meinen eigenen Code schreiben, um den HTML-Code zu analysieren?

Antwort

6

Der zitierte Artikel wurde aktualisiert, um Änderungen in der API zwischen iOS 8 Betas zu reflektieren. Ab Version 8.0.1 gibt es keine dataDetectorTypes Eigenschaft auf WKWebView, mit keiner anderen vergleichbaren öffentlichen API.

Bis es wieder in die Klasse hinzugefügt wird, müssten Sie dies selbst mit NSDataDetector implementieren, oder Sie geben sich mit UIWebView.

+1

Danke für die Antwort. Haben Sie irgendwelche Gedanken darüber, wie eine solche Immobilie umgesetzt werden könnte? Ich wollte 'evaluateJavaScript: completionHandler:' verwenden, um den HTML-Code der Webseite beim Laden zu erhalten, und dann einen 'NSDataDetector' auf den Text anwenden, aber ich bin mir nicht sicher, ob das eine optimale Methode ist. –

+0

Wir müssen eine WKWebView Erweiterung dafür schreiben und sie auf GitHub verfügbar machen. – user3246173

+1

In iOS10 hat WKWebViewConfiguration die Eigenschaft "dataDetectorTypes" –

0

Eine einfache Abhilfe für Telefonnummer Detektor in WKWebView Unterstützung wäre regex checker in Javascript anwenden über WKUserScript

NSString *jScript = @"document.getElementById(\"main\").innerHTML.replace(/[\+\d]{1}[\d]{2,4}[\s,][\d\s-\\(\\),]{7,}/g, \"<a href=\"tel:\$&\">\$&</a>\")"; 

WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; 
WKUserContentController *wkUController = [[WKUserContentController alloc] init]; 
[wkUController addUserScript:wkUScript]; 

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; 
wkWebConfig.userContentController = wkUController; 

wkWebV = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig]; 
1

Die Eigenschaft dataDetectorTypes zu WKWebViewConfiguration in iOS10 hinzugefügt wurde.

Die Optionen sind phoneNumber, Link, Adresse, KalenderEvent, TrackingNumber, FlightNumber, LookupSuggestion und alle.

5

Eigentlich WKwebView hat keine dataDetectorTypes Eigenschaft. Aber in iOS 10 WKWebViewConfiguration hat.

Probieren Sie das folgende Code-Snippet aus.

WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; 
theConfiguration.dataDetectorTypes = WKDataDetectorTypeNone; 

WKWebView *webView = [[WKWebView alloc] initWithFrame:_someFrame configuration:theConfiguration]; 

Dies funktioniert nur ab iOS10.