如何在iOS上使用tel:with *(星号,星号)或#(hash,pound)?

时间:2011-01-11 18:03:15

标签: html ios url-scheme phone-call

我正在尝试使用tel网址在iPhone上发起呼叫,其中包含*。它会正确显示调用对话框,但在您单击调用时会回退到safari。

<a href="tel:123*12">Test</a>

4 个答案:

答案 0 :(得分:33)

This documentation from Apple应该会有所帮助:

  

为防止用户恶意重定向电话或更改手机或帐户的行为,请拨打电话   支持tel中的大多数但不是全部的特殊字符   方案。具体来说,如果URL包含*或#字符,则   电话应用程序不会尝试拨打相应的电话   号。

更新(2018年1月2日):此处提及的信息可能已过时。如果Apple在其较新的SDK中放宽了这些规则,请参阅新文档。请参阅Husam的答案。

答案 1 :(得分:7)

iOS11 现在允许我们使用*#

拨打电话号码

Swift示例代码

    let number = "*111*12345#"
    let app = UIApplication.shared
    if let encoded = number.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
        let u = "tel://\(encoded)"
        if let url = URL(string:u) {
            if app.canOpenURL(url) {
                app.open(url, options: [:], completionHandler: { (finished) in

                })
                return
            }
        }
    }

答案 2 :(得分:5)

批准的答案不正确,至少不再适用。我已将其作为web page进行测试,并且在应用中可以使用特殊字符#*进行拨号。如果你想在任何一个实例中使用这些字符,你必须做的就是对它们进行编码。

在HTML中,#变为%23*不需要转义

如果使用Swift,您可以使用此功能对链接进行编码并从应用程序中按下它:

//number format example (commas are pauses): 123-456-7890,,555#,1234
fileprivate func callNumber(_ number: String) {
    let dialString = "telprompt://" + number
    if let escapedDialString = dialString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
      if let dialURL = URL(string: escapedDialString) {
        UIApplication.shared.openURL(dialURL)
      }
    }
  }

答案 3 :(得分:0)

如果要将 * 添加到输入为“tel”的 href 中,则需要使用 utf-8 编码版本 - %2A

参考:W3

例如

<a href="tel:%2A1234"> Phone me <a/>