area标签的ping属性仅在同时具备href属性、嵌套于map中且被img正确usemap关联时生效;请求为异步POST,Content-Type为text/ping,不触发CORS预检,但服务端需配置Access-Control-Allow-Origin才能确保可用。

area 标签的 ping 属性确实可用,但必须满足严格前提:它只在 area 元素同时具备 href 属性时才生效,且该 area 必须嵌套在 map 中,并被 img 通过 usemap 正确关联。不满足任一条件,ping 就会被浏览器完全忽略。
area 的 ping 必须和 href 同时存在
这是最常踩的坑——很多人给 area 加了 ping 却忘了设 href,结果点击毫无反应,Network 面板也看不到请求。
-
href是强制前置条件,哪怕只是href="#"或href="javascript:void(0)"(注意:后者在部分浏览器中可能触发安全限制) -
ping值必须是空格分隔的 URL 列表,例如:ping="https://log.example.com/click https://ab.test/click" - 若
href为相对路径(如href="/product/123"),ping仍可指向任意合法 URL,但跨域时需服务端配置Access-Control-Allow-Origin
实际能发出去的请求长什么样
当用户点击一个带 href 和 ping 的 area,浏览器会立即发起一个异步 POST 请求,特征如下:
- 请求方法固定为
POST,Content-Type是text/ping(不是application/json) - 请求体通常为空;少数浏览器(如 Chrome)会在请求体中附带原始
href值和来源页面 URL,但不可控、不保证 - 请求头包含
Origin、User-Agent、Referer,但没有自定义 header 的能力 - 不会触发 CORS 预检请求,但响应头缺失
Access-Control-Allow-Origin时,请求仍会发出——只是开发者无法在 JS 中监听成败
为什么点了 area 却没看到 ping 请求
常见失效原因不是代码写错,而是环境或配置问题:
- 当前页面是
http://协议:Chrome 94+ 已静默禁用非安全上下文中的ping,控制台无报错,Network 面板也不显示 -
area没嵌套在map内,或img的usemap值与map的name不匹配(比如少写了#) - 用户快速关闭标签页或导航离开,导致后台请求被浏览器中止(
ping无送达保障) - 目标
pingURL 返回了 3xx 重定向:浏览器明确不跟随重定向,请求即终止
area ping 和 a ping 的行为完全一致吗
行为层面基本一致,但有一个关键差异点容易被忽略:
-
a标签的ping在点击瞬间触发,无论href是否跳转成功;而area的ping触发时机依赖于图像映射的坐标命中逻辑——如果coords值写错、缩放后未适配、或用户点击位置因 CSS transform 偏移导致未命中area区域,那连href都不会触发,ping更无从谈起 -
area不支持onclick等事件拦截,所以无法像a那样用 JS fallback 补救失败的ping - 服务端收到
ping请求时,无法区分来源是a还是area,只能靠 URL 路径或 Referer 解析
真正要用好 area 的 ping,得先确保热区坐标准确、协议安全、服务端 CORS 可写,再接受它“发了但不一定到”的事实。把它当轻量点击日志可以,当成关键埋点就危险了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











