javascript - 检测 attachShadow 事件

标签 javascript events dom shadow-dom mutation-observers

我想检测将阴影附加到宿主元素的事件。

用例:使用 MutationObserver 来观察任何 DOM 变化并作为绑定(bind)(绑定(bind))框架逻辑的一部分对变化的内容进行后处理。

为什么我需要检测这个事件?为了能够观察 shadowDOM 中的变化,应该创建另一个 MutationObserver 并将其设置在 shadowRoot 上 - 这工作得很好,所以唯一的问题是检测新创建的阴影。

不用说,显然 MutationObserver 没有检测到 attachShadow 操作,尝试将所有选项标志设置为 true。

注意:我知道 this question on this forum ,但这不是完全相同的问题,恕我直言。

更新:

我将@Supersharp 的答案标记为问题的答案,因为看起来代理 原生attachShadow 方法是目前唯一的方法 观察这个 Action 。

但是,类似于我们没有代理 appendChildremoveChildinnerHTML/textContent 和其他,但依赖于定义良好的 MutationObserver API,在这种情况下,也必须有一种方法可以实现相同的目标,而不会潜在地破坏 native API 行为或 catch 和探索任何其他可能的 future 附加影子的方法(可能也会被删除?,已经有覆盖)等。

我已经通过 MutationObserver 发布了支持 attachShadow 的提案 here .

最佳答案

您可以覆盖 HTMLElement 原型(prototype)中定义的原生 attachShadow() 方法。

然后,在新函数中,将 MutationObserver 添加到影子根。

var attachShadow = HTMLElement.prototype.attachShadow

HTMLElement.prototype.attachShadow = function ( option )
{
  var sh = attachShadow.call( this, option )
  console.info( '%s shadow attached to %s', option.mode, this )
  //add a MutationObserver here
  return sh
}

target.attachShadow( { mode: 'open' } )
  .innerHTML = 'Hello' 
<div id=target></div>

关于javascript - 检测 attachShadow 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217178/

相关文章:

javascript - 更改事件 oninput typescript 的值

vb.net - 更改事件中的单选按钮检查状态

PHP 从 iframe/对象嵌入数组中提取 youtube 视频 ID?

JavaScript switch 语句只返回第一种情况

jquery - 如何仅获取 HTML 属性而不获取 jQuery 或其他插件设置的数据存储值

javascript - 来自 Web 服务的 Angular 日期时间格式

javascript keyup 和 keydown 事件

javascript - 下拉选择的值没有在视觉上更新(html-select,javascript)

javascript - 使输入建议控件随输入一起移动

javascript - 使用 Javascript 延迟和淡入文本?