26

我正在尝试使用其中tel包含 * 的 url 在 iPhone 上发起呼叫。它会正确调出通话对话框,但在您单击通话时会返回到 safari。

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

4 回答 4

33

Apple的这份文档应该会有所帮助:

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

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

于 2011-01-11T18:13:07.563 回答
11

iOS11现在允许我们用*or拨打电话号码#


斯威夫特示例代码

    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
            }
        }
    }
于 2017-11-01T19:56:46.563 回答
5

批准的答案不正确,至少不再正确。我已经测试了网页和应用程序都能够使用特殊字符#*. 如果您希望在任一实例中使用这些字符,您必须做的就是对它们进行编码。

在 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)
      }
    }
  }
于 2017-02-24T21:23:26.813 回答
0

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

参考: W3

例如

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

于 2021-05-03T08:17:38.670 回答