当前位置:  开发笔记 > 前端 > 正文

从UIWebView打开tel:链接

如何解决《从UIWebView打开tel:链接》经验,为你挑选了1个好方法。

我进行了搜索和搜索,但似乎无法找到解决此问题的方法.

出于某种原因,我不能让'tel:'链接在UIWebView中工作.单击链接时,将显示消息"无法显示URL".单击Safari中的相同链接可以完美地拨打该号码.

这个问题始于iOS 5.这些链接在iOS 4.2和4.3中完美运行.

我不确定其他哪些信息可能有用,所以如果我需要澄清,请告诉我.

谢谢!

编辑:

这是使用中的实际代码......

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *url = request.URL;    

    if ([url.scheme isEqualToString:@"tel"]) {
        return YES;
    }

    if (![url.scheme isEqualToString:@"http"] && ![url.scheme isEqualToString:@"https"]) {
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
            return NO; // Let OS handle this url
        }
    }

    [NSThread detachNewThreadSelector:@selector(startBusy) toTarget:self withObject:nil];
    return YES;
}

如果我取出第一个if语句,则会立即拨打该号码而不进行确认.我真的希望它通过提供警报来实现以前的功能,让您可以选择在拨打号码之前点击"呼叫"或"取消".



1> bobwaycott..:

如果作为HTML链接启动,则tel URL方案如果显示为:

1-408-555-5555

如果从本机URL字符串启动(意味着您使用Objective-C编写此字符串并且未通过WebView提供此字符串),则您的URL字符串应如下所示:

tel:1-408-555-5555

注意:这仅适用于安装了Phone应用程序的iOS设备(仅限iPhone).iPad和iPod Touch设备将显示警告消息.

注意2:确保您传递的电话号码不包含空格或其他特殊字符(例如*和#).

代码反馈

根据您的代码,现在情况有点清晰.您评论当您ifshouldStartLoadWithRequest方法中返回第一个语句(返回的位置YES)时没有任何反应.这正是您应该看到的行为,因为您的应用不是电话应用.只有Phone应用程序才能处理tel:URL方案.通过返回YES,您告诉操作系统您的应用将处理电话呼叫,但它不能.当条件被删除时,您会收到呼叫,因为下一个块检查if ([[UIApplication sharedApplication] canOpenURL:url])允许sharedApplication(在这种情况下,是电话应用程序)启动呼叫.

事情如何运作和你想要什么

操作系统不会为您显示"呼叫/取消"警告对话框.那取决于你.它出现在Safari中,因为Safari应用程序的shouldStartLoadWithRequest方法无疑tel:通过显示一个来响应该方案UIAlertView.if ([url.scheme isEqualToString:@"tel"])应该使用"取消"和"取消"按钮YES触发a 时的条件UIAlertView.随叫随到,你会告诉sharedApplicationopenURL; 在取消时,您不会发出通话而且您也想要返回,NO因此您的应用不会尝试loadWithRequest.

自我修正编辑

为了公平对待我自己的思维过程中的错误,我将上面的回答留在上面.

我认为呼叫/取消对话框实际上是操作系统的一个功能.对不准确的道歉.

我也错误地浏览了你的代码将URL处理传递给sharedApplication,只有当方案是http或时才会发生https.

再看看代码,我想知道你是否有任何机会在Safari中有调试选项?我相信这可以防止警报弹出.另外 - 只是为了仔细检查显而易见的事实 - 你是不是在模拟器中尝试这个,对吗?如果您删除http/ 的条件检查会发生什么,https并且只是使用canOpenURL检查?

但是,除了我对条件和对话框本身的注释中的错误之外,您仍然不应该返回YES.要拨打电话,您应该只能通过将其传递到sharedApplication:openURL并确保您返回,NO因为您的应用不是电话应用.您希望YES以此方法返回的唯一原因是您的应用程序将以tel:特殊方式处理链接,而不涉及将其发送到电话应用程序.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有