2014-09-22 13 views
6

In UIWebView, era abbastanza facile aggiungere UIDataDetectorTypes ad una vista:WKWebKit: Nessun parametro dataDetectorTypes

myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 

E così via. Tuttavia, WKWebView non sembra avere una proprietà simile. Il riferimento This indica che è stato spostato nella proprietà WKWebViewConfiguration allo myWebKitView.configuration, ma sia lo official documentation che le intestazioni non fanno riferimento a dataDetectorTypes.

Attualmente sto provando a migrare un'app dall'utilizzo di UIWebView a WKWebView e attualmente questa app è configurabile dall'utente UIDataDetectorTypes. Quindi, c'è un modo per implementarlo usando l'API fornita, o dovrei scrivere il mio codice per analizzare l'HTML?

risposta

6

L'articolo citato è stato aggiornato per riflettere le modifiche nell'API tra i beta di iOS 8. A partire da 8.0.1, non esiste la proprietà dataDetectorTypes su WKWebView, senza altre API pubbliche comparabili.

Fino a quando non viene aggiunto di nuovo nella classe, è necessario implementare questo te stesso con NSDataDetector o rassegnarsi a utilizzare UIWebView.

+1

Grazie per la risposta. Avete qualche idea su come una tale proprietà sarebbe stata implementata? Stavo per usare 'evaluateJavaScript: completionHandler:' per ottenere il codice HTML della pagina web al caricamento, quindi applicare un 'NSDataDetector' al testo, ma non sono sicuro che sia un metodo ottimale. –

+0

Abbiamo bisogno di scrivere un'estensione WKWebView per questo e renderlo disponibile su GitHub. – user3246173

+1

In iOS10 WKWebViewConfiguration ha la proprietà "dataDetectorTypes" –

0

Una semplice soluzione per telefono sostenente rivelatore numero WKWebView sarebbe applicare checker regex in javascript via 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

I dataDetectorTypes alloggio è stato aggiunto al WKWebViewConfiguration in iOS10.

Le opzioni sono phoneNumber, link, address, calendarEvent, trackingNumber, flightNumber, lookupSugestion e tutto.

5

In realtà WKwebView non ha una proprietà dataDetectorTypes. Ma in iOS 10 WKWebViewConfiguration ha.

Provare il seguente frammento di codice.

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

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

Funzionerà solo da iOS10 in poi.

Problemi correlati