【发布时间】:2011-06-07 08:27:38
【问题描述】:
我正在尝试使用带有 * 的 tel 网址在 iPhone 上发起呼叫。它会正确调出通话对话框,但在您单击通话时会返回到 safari。
<a href="tel:123*12">Test</a>
【问题讨论】:
标签: html ios url-scheme phone-call
我正在尝试使用带有 * 的 tel 网址在 iPhone 上发起呼叫。它会正确调出通话对话框,但在您单击通话时会返回到 safari。
<a href="tel:123*12">Test</a>
【问题讨论】:
标签: html ios url-scheme phone-call
This documentation from Apple 应该会有所帮助:
为防止用户恶意重定向电话或更改电话或帐户的行为,电话应用程序 支持电话中的大多数(但不是全部)特殊字符 方案。具体来说,如果 URL 包含 * 或 # 字符,则 电话应用程序不会尝试拨打相应的电话 号码。
更新(2018 年 1 月 2 日):此处提及的信息可能已过时。如果 Apple 在其较新的 SDK 中放宽了这些规则,请参阅新文档。请参阅 Husam 的回答。
【讨论】:
* 或#,请在此处阅读我的答案stackoverflow.com/a/47062700/1599713
iOS11现在允许我们使用*或#拨打号码
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
}
}
}
【讨论】:
tel://前缀。
批准的答案不正确,至少现在不再正确。我已经测试了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)
}
}
}
【讨论】:
tel:// 部分。 (也不是说不再需要 telprompt:// 来获得呼叫确认提示。tel:// 现在也会这样做。)
如果您想将 * 添加到类型为“tel”的 href,您需要使用 utf-8 编码版本 - %2A
参考:W3
例如
<a href="tel:%2A1234"> Phone me <a/>
【讨论】: