chrome 110及更早版本完全不支持popover属性,该属性首次实现在chromium 114(2023年5月底),此前解析时静默忽略,js调用showpopover()会报错,且无对应实验标志可启用。

不存在。 Chrome 110 及更早版本根本不支持 popover 属性,连实验标志都用不上——它压根没进代码库。
Chrome 110 确实不认 popover 这个词
该属性首次出现在 Chromium 114(2023 年 5 月底发布),此前所有版本(包括 110–113)解析时会直接忽略 popover 属性,既不报错也不生效。你在 Chrome 110 的 chrome://flags/ 里搜不到 “popover” 或 “popover API”,因为当时还没有这个实验选项。
“实验标志”只对已实现但默认关闭的功能有效
所谓实验标志(如 chrome://flags/#enable-experimental-web-platform-features),是给那些已写入浏览器、但尚未稳定的功能提供手动开启入口。而 popover 在 114 之前连基础实现都没有,所以:
- 加了
popover="manual"→ DOM 中可见,但 JS 调用showPopover()会直接抛TypeError: targetElement.showPopover is not a function - 用
popovertarget属性 → 浏览器静默忽略,点击无反应,控制台零提示 - 检查支持性只能靠
"showPopover" in HTMLElement.prototype,这个判断在 Chrome 113 及以前恒为false
想在旧版 Chrome 里模拟类似行为?别碰原生 popover
如果你的项目需兼容 Chrome 110–113,或要同时支持 Safari/Firefox,原生 popover 不是备选方案。此时更现实的做法是:
- 用
<dialog></dialog>+showModal():Chrome 37+ 就支持,Firefox 98+、Safari 15.4+ 也完整可用,语义清晰、可聚焦、ESC 关闭、有 backdrop(需 CSS 补全) - 避免依赖锚点定位(
anchor/position: anchor):CSS 锚点定位是另一套新特性,同样晚于 114 才落地,且 Safari 17.4+ 才开始支持 - 若必须用 JS 控制弹层,优先封装
getBoundingClientRect()+position: absolute的轻量方案,比硬等原生能力更可控
真正容易被忽略的一点:很多人在查兼容性时只看 “caniuse.com” 或 MDN 的表格,却没注意那些表格的“最早支持版本”往往指“首个稳定支持版本”,而非“首个带 flag 的版本”。popover 就是典型——它跳过了 flag 阶段,直接从 114 开始作为稳定功能( albeit initially behind a flag in early 114 dev builds)上线。所以查版本支持,务必以 Chromium 官方 release notes 为准,而不是倒推 flags 列表。











