ios - Cordova 试图调用电话号码

标签 ios objective-c xcode cordova

我想在 iOS 中调用电话号码,但我只有模拟器和 iPod Touch 可以测试。

代码使用了以下内容:

window.location.href = 'tel:01234567890';

在 Android 上工作正常,但在 iOS 上它死于:

Failed to load webpage with error: The URL can't be shown

现在,我确实意识到以前有人问过这个问题,但一段时间前的普遍共识是“它不起作用,你需要使用插件”。虽然一段时间以来没有太多关于此的问题,但有哪些问题似乎表明它在以编程方式执行时有效(如上面的 window.location.href)。我已经尝试了 iOS PhoneDialer 和同一插件的更新版本,但两者在 XCode 中都有错误(ARC forbids explicit message send of 'release')——有点麻烦,我可以让它运行,但是后来 PhoneGap 没有找到插件——我真的觉得我用这种方法碰壁了,我不敢相信这么简单的事情需要这么夸张的东西。

我知道出于安全原因你不能自动拨号/自动调用号码,但我需要做的就是打开预填充号码的拨号器,这肯定与 mailto:info@ 没有什么不同example.com 链接打开您的电子邮件客户端并预先填充发件人?

所以,我的问题是:

  • 最近对 PhoneGap、iOS 或 XCode 的更新是否改变了这一点?
  • 或者,是不是我无法在 iPod 或模拟器上执行此操作,而它在 iPhone 上可以正常工作?
  • 我该如何解决? :)

最佳答案

您没有指定您使用的是哪个版本的 Cordova,所以我假设版本 > 3。

确保 InAppBrowser ,自版本 3 起的 pluginis installed 然后通过 Javascript 调用它来打开链接,如下所示:

window.open('tel:12345678', '_system')

_system 将使用系统自己的浏览器打开它,这反过来将打开调用对话框,如果您将它用于 http://maps.apple.com/ 它将在 map 应用程序中打开,并且对于其他应用程序类似打开特殊网址。

备注:

  • in the docs of the InAppBrowser plugin 所述,window.open 函数不会自动设置。你必须自己做:window.open = cordova.InAppBrowser.open;。相反,您可以直接使用 cordova.InAppBrowser.open('tel:12345678', '_system');
  • 确保您的电话号码中没有任何空格(+ 前缀没问题)。例如,您可以使用如下函数, 假设 num 是一个字符串。

功能:

function placeCall(num) {
    if (window.cordova) {
        cordova.InAppBrowser.open('tel:' + num.replace(/\s/g,''), '_system');
    }
}

关于ios - Cordova 试图调用电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639663/

相关文章:

xcode - 在 Xcode 4.3.2 中将现有项目置于源代码管理之下

javascript - AngularJS 自定义过滤器不适用于 iOS 和 IE

objective-c - 非 rootViewController View 中的 NavigationController 问题

ios - 在 FXBlurView 的单独类中获取 UIView

iphone - 为方法传递 block

ios - 偶尔从NSDateFormatter返回零

c++ - Poco::Uint32 和 Mactypes Uint32 不明确

swift - 在 Swift 3 中使用未解析的标识符 'LAContext'

ios - UITableView indexPath 部分逻辑

ios - DidEnterRegion 仅在调用 requestAlwaysAuthorization 时调用。信标