2014-09-22 11 views
6

W UIWebView, to było dość łatwo dodać UIDataDetectorTypes do widoku:WKWebKit: No parametr dataDetectorTypes

myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 

I tak dalej. Jednak wydaje się, że WKWebView nie ma podobnej właściwości. This referencja wspomina, że ​​przeniosła się do właściwości WKWebViewConfiguration pod adresem myWebKitView.configuration, ale zarówno official documentation, jak i same nagłówki nie zawierają odniesienia do dataDetectorTypes.

Obecnie próbuję przeprowadzić migrację aplikacji z użyciem UIWebView do WKWebView, a ta aplikacja ma obecnie konfigurowalny przez użytkownika UIDataDetectorTypes. Czy istnieje sposób wdrożenia tego przy użyciu dostarczonego API, czy też musiałbym napisać własny kod do parsowania kodu HTML?

Odpowiedz

6

Cytowany artykuł został zaktualizowany, aby odzwierciedlić zmiany w interfejsie API między systemem iOS 8 betas. Od wersji 8.0.1 nie ma właściwości dataDetectorTypes na WKWebView, bez żadnego innego porównywalnego publicznego interfejsu API.

Dopóki nie zostanie ponownie dodany do zajęć, musisz to zaimplementować samodzielnie przy pomocy NSDataDetector lub zrezygnować z używania numeru UIWebView.

+1

Dzięki za odpowiedź. Czy masz jakieś przemyślenia na temat sposobu, w jaki taka własność zostanie wdrożona? Miałem zamiar użyć "evaluateJavaScript: completionHandler:", aby uzyskać kod HTML strony internetowej przy załadowaniu, a następnie zastosować 'NSDataDetector' do tekstu, ale nie jestem pewien, czy jest to optymalna metoda. –

+0

Musimy napisać rozszerzenie WKWebView i udostępnić je na GitHub. – user3246173

+1

W iOS10 WKWebViewConfiguration ma właściwość "dataDetectorTypes" –

0

Prosty obejście wspieranie numer telefonu detektora w WKWebView byłoby zastosowanie regex sprawdzania w javascript poprzez 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

W dataDetectorTypes własności został dodany do WKWebViewConfiguration w iOS10.

Dostępne opcje to phoneNumber, link, address, calendarEvent, trackingNumber, flightNumber, lookupSuggestion i wszystkie.

5

W rzeczywistości WKwebView nie ma właściwości DataDetectorTypes dataDetectorTypes. Ale w iOS 10 WKWebViewConfiguration ma.

Spróbuj użyć następującego fragmentu kodu.

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

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

To będzie działać tylko od iOS10.