<meta name="format-detection" content="telephone=no">已失效,iOS 10起Safari彻底移除支持,现唯一有效方案是CSS+HTML组合:添加style="-webkit-touch-callout: none;"并配合role="text"语义化包裹。

format-detection 已失效,别再写 <meta name="format-detection" content="telephone=no"> —— iOS 10 起 Safari 完全忽略它,写了等于白写。
为什么 format-detection 不起作用?
这个 meta 标签在 iOS 10 之后被 WebKit 彻底移除支持,不是“有时失效”,而是任何版本的 Safari(包括 iOS 16+)压根不解析它。控制台不会报错,页面也照常渲染,但数字该变链接还是变链接。
它原本只对 iOS Safari 有微弱效果,对 Android Chrome、Firefox Mobile 等浏览器本就无效;现在连最后这点作用也没了。
真正生效的方案:CSS + HTML 组合
目前唯一稳定禁用电话识别的方式,是同时满足两个条件:视觉层阻止调用行为 + 语义层消除触发依据。
- 给包裹数字的元素加内联样式:
style="-webkit-touch-callout: none;"(关键!仅此一项就能拦住 90% 的误识别) - 配合
role="text"明确告诉浏览器:“这不是可交互内容,只是纯文本” - 避免用
<a>、<button>或<span>(无语义)直接包长数字;优先用<div>或<p>并带上role - 如果数字含短横线或括号(如
021-8765-4321),Safari 更倾向误判,建议改为空格分隔:021 8765 4321
示例:
立即学习“前端免费学习笔记(深入)”;
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<div style="-webkit-touch-callout: none;" role="text">13812345678</div>
为什么不能用 JavaScript 拦截点击?
因为 Safari 的电话识别发生在渲染引擎底层,不是 DOM 事件层面的行为。用户手指点下去那一刻,系统已经跳转拨号界面了,click、touchstart 甚至 pointerdown 都收不到——JS 根本没机会执行 event.preventDefault()。
试图给数字加 onclick="return false" 或监听 document 全局事件,全是徒劳。
最容易被忽略的测试环节
这个行为只存在于 WebKit 移动端(iOS Safari、部分安卓 WebView),PC 浏览器和 DevTools 的响应式模拟器完全不复现。哪怕你本地开发一切正常,真机一测就出问题。
必须拿 iOS 设备打开实际 URL 测试,且要输入真实 7 位以上连续数字(比如 13912345678 或 02187654321),不能只看样式是否变蓝——得真点一下,确认是否唤起拨号页。


















