2014-09-22 164 views
6

UIWebView,這是很容易添加到UIDataDetectorTypes一個觀點:WKWebKit:沒有dataDetectorTypes參數

myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 

等。但是,WKWebView似乎沒有類似的屬性。 This參考文獻提到它已經轉移到WKWebViewConfiguration屬性myWebKitView.configuration,但official documentation和標題本身都沒有提及dataDetectorTypes

我正在嘗試將使用UIWebView的應用程序遷移到WKWebView,並且此應用程序目前有用戶可配置的UIDataDetectorTypes。那麼,有沒有什麼方法可以使用提供的API來實現這一點,還是我必須編寫自己的代碼來解析HTML?

回答

6

引用的文章已更新,以反映iOS 8 beta版之間的API更改。從8.0.1起,WKWebView上沒有dataDetectorTypes財產,沒有其他類似的公共API。

直到它被重新添加到課程中,您必須自己實現NSDataDetector,或者自己再次使用UIWebView

+1

感謝您的回覆。你有沒有想過如何實施這樣的財產?我打算使用'evaluateJavaScript:completionHandler:'加載網頁的HTML,然後在文本中應用一個'NSDataDetector',但我不確定這是否是一種最佳方法。 – 2014-10-02 13:10:17

+0

我們需要爲此編寫一個WKWebView擴展,並使其在GitHub上可用。 – user3246173 2016-05-11 18:40:06

+1

在iOS10中,WKWebViewConfiguration具有屬性「dataDetectorTypes」 – 2016-10-20 08:28:46

0

簡單的解決方法,用於支撐電話號碼檢測器在WKWebView將經由申請以JavaScript正則表達式檢查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

屬性dataDetectorTypes已被添加到在WKWebViewConfiguration iOS10。

選項包括phoneNumber,link,address,calendarEvent,trackingNumber,flightNumber,lookupSuggestion等。

5

其實WKwebView沒有dataDetectorTypes屬性。但在iOS 10 WKWebViewConfiguration有。

請嘗試下面的代碼片段。

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

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

這將從iOS10只工作開始。