WKWebKit:没有dataDetectorTypes参数

时间:2014-09-22 15:26:20

标签: ios objective-c xcode uiwebview webkit

UIWebView中,将UIDataDetectorTypes添加到视图中非常容易:

myUIWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber;

等等。但是,WKWebView似乎没有类似的属性。 This引用提到它已移至WKWebViewConfiguration myWebKitView.configuration属性,但official documentation和标题本身均未引用dataDetectorTypes

我目前正在尝试将应用从UIWebView迁移到WKWebView,此应用目前具有用户可配置的UIDataDetectorTypes。那么,有没有办法使用提供的API实现它,或者我是否必须编写自己的代码来解析HTML?

6 个答案:

答案 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)

您可以在故事板属性检查器中找到

Screenshot

答案 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];