页面底部加了个一键拨号,代码就一行,测试机上点着却毫无反应 ☎️。排查一圈下来,坑不在代码,在运行环境。记录一下过程。

写法本身没问题
<a href="tel:+8613800000000">联系客服</a>
格式要求严格:国家码开头,号码里不带空格、括号、横线。写 tel:138-0000-0000 这种,部分浏览器直接判定无效。
真正的拦路虎是环境
桌面 Chrome 与 Firefox 默认忽略 tel 链接,因为桌面系统没有拨号能力 ⚠️。能用的是 iOS Safari、部分 Android Chrome,以及微信内置浏览器。微信里点击会唤起系统拨号确认框,体验反而最好。
两个隐藏条件
- 页面需跑在 HTTPS 下,个别内核在 HTTP 环境直接禁用协议唤起。
- CSP 如果配了
default-src收紧策略,tel 协议可能被一并拦下,需要显式放行。
桌面端的降级
拨号能力不存在时,号码本身得让用户看见。做法:链接旁展示完整号码,配一个点击复制按钮 📋。复制走 Clipboard API,一行代码的事,比让用户对着屏幕抄号码体面得多。
结论:tel 链接是移动端能力,桌面端靠展示加复制兜底,两端都照顾到才算完成 ✅。
