19

我正在尝试在 iOS 中拨打电话号码,但是我只有模拟器和 iPod Touch 进​​行测试。

该代码使用了以下内容:

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

在 Android 上运行良好,但在 iOS 中它会因以下原因而死:

无法加载网页并出现错误:无法显示 URL

现在,我确实意识到以前有人问过这个问题,但前一段时间的普遍共识是“它不起作用,你需要使用插件”。不过,一段时间以来没有太多关于此的问题,并且有什么问题似乎表明它在以编程方式执行时有效(如上所示window.location.href)。我已经尝试过iOS PhoneDialer和同一插件的较新版本,但两者在 XCode ( ARC forbids explicit message send of 'release') 中都有错误 - 有点笨拙,我可以让它运行,但是 PhoneGap 没有找到插件 - 真的感觉就像我我用这种方法撞到了一堵墙,我不敢相信这么简单的事情需要这么多的东西。

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

所以,我的问题是:

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

5 回答 5

41

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

确保安装了InAppBrowser (版本 3 以来的插件) ,然后通过 Javascript 调用它来打开链接,如下所示:

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

_system将使用系统自己的浏览器打开它,然后打开呼叫对话框,如果您对http://maps.apple.com/使用它,它将在地图应用程序中打开,对于为特殊 URL 打开的其他应用程序类似。

评论:

  • InAppBrowser 插件的文档中所述,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');
    }
}
于 2013-10-28T19:00:16.873 回答
7

下面的代码适用于 iphone:-

window.open('tel:123456', '_system');

模拟器不支持拨号器。没必要浪费时间。

于 2016-05-06T09:46:06.170 回答
2

确保您的 href 中的电话号码也没有任何格式,因为在 iOS 上它会导致链接在 PhoneGap 应用程序中不起作用。例如,使用 tel:0390005555,而不是 tel:(03) 9000 5555。

于 2014-02-26T00:10:41.820 回答
1

我不相信这是科尔多瓦的问题。我知道在原生 iOS 中,您无法在模拟器或 iPod touch 上调出拨号器。您需要在实际的 iPhone 上对此进行测试。

于 2013-10-28T19:05:10.390 回答
-4

我知道这是一个迟到的回答时间。

尝试添加//到 url。像这样tel://xxxxxxxxx,看看它是否有效。

截至今天,在 IOS 8.4、iPhone 6、6+ 中为我工作。

于 2015-07-16T12:44:31.530 回答