在UIWebView
中,将UIDataDetectorTypes
添加到视图中非常容易:
myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
等等。但是,WKWebView
似乎没有类似的属性。 This引用提到它已移至WKWebViewConfiguration
myWebKitView.configuration
属性,但official documentation和标题本身均未引用dataDetectorTypes
。
我目前正在尝试将应用从UIWebView
迁移到WKWebView
,此应用目前具有用户可配置的UIDataDetectorTypes
。那么,有没有办法使用提供的API实现它,或者我是否必须编写自己的代码来解析HTML?
答案 0 :(得分:11)
实际上WKwebView没有 dataDetectorTypes 属性。但在iOS 10中 WKWebViewConfiguration 有。
请尝试以下代码段。
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
theConfiguration.dataDetectorTypes = WKDataDetectorTypeNone;
WKWebView *webView = [[WKWebView alloc] initWithFrame:_someFrame configuration:theConfiguration];
这仅适用于iOS10以上。
答案 1 :(得分:6)
引用文章已更新,以反映iOS 8测试版之间API的变化。自8.0.1开始,dataDetectorTypes
上没有WKWebView
属性,没有其他类似的公共API。
在将其添加回课程之前,您必须自己使用NSDataDetector实现此功能,或者让自己使用UIWebView
。
答案 2 :(得分:3)
答案 3 :(得分:1)
属性dataDetectorTypes已添加到iOS10中的WKWebViewConfiguration。
选项包括phoneNumber,link,address,calendarEvent,trackingNumber,flightNumber,lookupSuggestion等。
答案 4 :(得分:1)
WKWebView
中设置 WKWebViewConfiguration
数据检测器。迅捷版:
let webViewCofig = WKWebViewConfiguration()
webViewCofig.dataDetectorTypes = [.address]
webView = WKWebView(frame: view.frame, configuration: webViewCofig)
有效选项包括phoneNumber,链接,地址,calendarEvent,trackingNumber,flightNumber,lookupSuggestion等。传递空的[]
设置为无。
答案 5 :(得分:0)
在WKWebView中支持电话号码检测器的简单解决方法是通过 WKUserScript
在javascript中应用正则表达式检查器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];