【问题标题】:Cordova trying to dial telephone number科尔多瓦试图拨打电话号码
【发布时间】:2013-11-07 12:18:09
【问题描述】:

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

代码使用了以下内容:

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

在 Android 上运行良好,但在 iOS 中却死了:

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

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

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

所以,我的问题是:

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

【问题讨论】:

    标签: ios objective-c xcode cordova


    【解决方案1】:

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

    确保InAppBrowserplugin,自版本 3 起,is installed,然后通过像这样通过 Javascript 调用它来打开链接:

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

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

    备注:

    • 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');
        }
    }
    

    【讨论】:

    • 这在 iPod Touch 和模拟器上都不起作用。我应该期望它可以在 iPhone 上运行吗?我在控制台中得到以下信息,所以我假设插件正在工作:[6278:907] THREAD WARNING: ['InAppBrowser'] took '124.701904' ms. Plugin should use a background thread.
    • @gaqzi 几天以来我一直在努力让它工作,但不幸的是我一直都在失败。我已经在iPhone 6s 中测试了IOS 10 上的代码。单击电话号码时没有任何反应。你能帮我找出为什么我不能让这个代码工作吗?它也可以在模拟器上运行吗?
    【解决方案2】:

    下面的代码非常适合 iphone:-

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

    模拟器不支持拨号器。无需浪费时间。

    【讨论】:

    • 感谢最后一行!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 它在 iPhone 上运行良好。模拟器无法工作,因为它无法拨号。
      【解决方案5】:

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

      尝试将// 添加到网址。像这样tel://xxxxxxxxx 看看它是否有效。

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

      【讨论】:

      • 您不需要添加 //。按照 iOS 9.2.1 上接受的答案中的描述工作
      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      相关资源
      最近更新 更多