You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止闭合Shadow Root内的事件向外泄漏?

阻止闭合Shadow Root事件向外泄漏的可靠高效方案?

我有一个承载敏感信息自定义控件的闭合Shadow Root,即便处于闭合状态,事件仍会从Shadow Root冒泡到外部DOM(仅在离开时移除Shadow Root路径)。这会导致闭合Shadow DOM中的信息泄漏到宿主文档,甚至可能被用于对沙箱化DOM进行按键记录。

Event对象有一个Event.composed只读属性,定义为:

Event接口的只读属性composed返回布尔值,表示事件是否会跨Shadow DOM边界传播到标准DOM中。

这正是我需要的功能,但该属性为只读,无法直接修改利用。

已尝试的方案

  • 删除Event.prototype.composed并替换为返回false的getter。
  • 在Shadow Root的宿主元素上添加事件处理器终止事件,但无论如何尝试,要么document.addEventListener("keydown", e => console.log(e), true);会捕获到泄漏事件,要么过早终止事件导致其他逻辑无法触发。

考虑尝试的方案

  • 劫持EventTarget.addEventListener方法,将每个回调包裹在沙箱代码中以拒绝试图逃离Shadow Root的事件,但无法确保在所有环境中生效。
  • 劫持所有事件并重新触发,将composed标记设为false,或转为自定义事件,但这会在鼠标或陀螺仪事件上造成性能损耗。
  • 使用iframe替代Shadow Root,但宿主文档仍为其所有者,无法确保效果。

请问在JavaScript中是否存在可靠且高效的方法来阻止闭合Shadow Root内的事件向外泄漏?

内容的提问来源于stack exchange,提问作者Prime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:20:06