Gus*_*nge 2 ios swift wkwebview ios9 ios10
我有一个WKWebView,可以在网页上加载带有一些电话链接的网页.
目前我有这个代码来处理这些链接的点击.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.request.url?.scheme == "tel" {
if #available(iOS 10.0, *) {
UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(navigationAction.request.url!)
}
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
Run Code Online (Sandbox Code Playgroud)
这在安装了ios 10的任何设备上都能正常工作,系统会提示我提示取消或拨打电话.但在ios 9设备上,电话应用程序屏幕闪烁(没有提示),之后没有任何反应.
小智 5
进行前的关键概念:
默认情况下,Web视图会自动将Web内容中显示的电话号码转换为电话链接.点击电话链接后,电话应用程序将启动并拨打该号码.该电话 URL方案被用来发动对iOS设备的电话应用程式,并启动指定的电话号码的拨号.
从HTML方面显示电话号码的网页必须如下:
<body>
<!-- Then use phone links to explicitly create a link. -->
<p>A phone number: <a href="tel:1-408-555-5555">1-408-555-5555</a></p>
<!-- Otherwise, numbers that look like phone numbers are not links. -->
<p>Not a phone number: 408-555-5555</p>
</body>Run Code Online (Sandbox Code Playgroud)
在这个简短的序言之后,WKWebView有两种行为,一种适用于iOS 9,另一种适用于iOS 10及更高版本.
iOS上的10苹果公司推出了一款名为属性dataDetectorTypes上WKWebViewConfiguration,默认情况下这个属性的值为WKDataDetectorTypeNone至极的手段,不检测什么.因此,如果你想检测电话号码和链接(只是一个例子),WKWebView的配置将如下所示(假设你有一个WKWebView类型的变量_webView):
WKWebViewConfiguration *configuration = [WKWebViewConfiguration new];
if ([configuration respondsToSelector:@selector(dataDetectorTypes)]) {
configuration.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;
}
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
Run Code Online (Sandbox Code Playgroud)
使用此配置,您的webView将能够处理所有内幕.
现在9> iOS <10(iOS在9到10之间)你的委托决策处理程序如下所示:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if ([navigationAction.request.URL.scheme isEqualToString:@"tel"]){
[UIApplication.sharedApplication openURL:navigationAction.request.URL];
decisionHandler(WKNavigationActionPolicyCancel);
}else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}
Run Code Online (Sandbox Code Playgroud)
这将打开手机应用程序.请记住:
iOS 10.3及更高版本会在拨号前显示警报并要求用户确认.(当此方案中之前10.3的iOS版本发生时,发起的iOS拨号无需进一步提示用户并且不显示警报,虽然本机应用程序可经配置以显示其自己的警报.
请不要按照任何关于URL方案白名单的说明进行操作,这是苹果在iOS 9上引入的另一个故事,但这是当你需要声明url方案处理程序时,现在tel方案由iOS处理.
希望这有帮助.
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |