ismap 在现代浏览器中仍有效,但需满足严格条件:img 必须嵌套在含有效 href 的 a 标签内,href 不能为空或伪协议;坐标以 ?x,y 形式拼接在 url 后,服务端需手动解析,不适用于响应式布局。

是的,ismap 在现代浏览器(Chrome、Edge、Firefox、Safari、Opera)中依然有效,点击图像后仍会把 x,y 坐标以查询字符串形式拼到 URL 后发送给服务器——但前提是 HTML 结构合法,且服务器能正确解析。
ismap 的触发条件很严格
它不是加了属性就自动生效。必须同时满足:
-
<img>元素必须是某个带有效href属性的可点击元素的后代(最常见的是包裹在@#@#@#@#@#@#@#@#@#@0中) -
href不能为空、不能是#、不能是 JavaScript 伪协议(如javascript:void(0)),否则浏览器会忽略ismap - HTML 文档类型不限(HTML5 或 XHTML),但 XHTML 中需写成
ismap="ismap",不能简写
坐标发送格式和后端接收方式
浏览器不会发 JSON 或表单数据,只做最原始的 URL 拼接:
GET /demo_form.asp?123,456 HTTP/1.1
注意:123,456 是逗号分隔的像素坐标,直接附加在 URL 路径之后、问号之后,没有参数名。这意味着:
- 后端脚本(比如 PHP、ASP、Node.js)必须从原始请求路径或查询字符串中手动截取这部分内容
- 不能依赖常规的
$_GET['x']或req.query.x—— 它们拿不到这个坐标 - 例如在 Node.js 的 Express 中,得用
req.originalUrl.match(/\?(\d+),(\d+)$/)提取
为什么你可能收不到坐标?常见失效原因
不是浏览器不支持,而是开发中容易踩这些坑:
- 把
<img ismap>直接放在页面里,没套<a href="..."></a>—— 浏览器静默忽略 - 用了
<a href="#"></a>或<a href="javascript:..."></a>—— 不算“有效 href”,ismap失效 - 服务端路由配置拦截了带逗号的 URL,比如某些 SPA 路由器把
/path?123,456当作非法路径返回 404 - 图片是通过 CSS
background-image渲染的 ——ismap只对<img ismap>标签生效,不作用于背景图
真正麻烦的不是浏览器兼容性,而是服务端要专门适配这种无参数名、无编码的原始坐标格式;再加上响应式布局下固定像素坐标很快失效,所以现在基本只在遗留系统或极简 CGI 场景里还能见到它。











