【发布时间】:2016-10-12 16:47:36
【问题描述】:
假设一个 JS 模块导出 shadowRoot,它是用 el.createShadowRoot 或 el.attachShadow 创建的(我们不知道是哪个)。我们如何检测根是 v0 影子根还是 v1 影子根(即我们如何检测使用哪种方法创建根)?
f.e.,我将在以下条件语句中填写什么?
// for argument's sake, we don't create the root, we only get a reference
// to it:
import shadowRoot from 'somewhere'
function getShadowRootVersion(root) {
if ( ... )
return 'v0'
if ( ... )
return 'v1'
}
console.log(getShadowRootVersion(shadowRoot)) // should output "v0" or "v1".
更多信息:
我们想知道影子根是从createShadowRoot 还是从attachShadow 创建的。生成的根不同:在使用createShadowRoot 创建的根中,<content> 元素用于分配元素。在使用attachShadow 创建的根中,<content> 元素不做任何事情,而是使用<slot> 元素。我们如何检测使用哪种方法来创建根(即我们是有 v0 根还是 v1 根)?
【问题讨论】:
-
您应该将此信息添加到问题中。 “我们想知道根是从 createShadowRoot 还是从 attachShadow 创建的。生成的根是不同的。在使用 createShadowRoot 创建的根中,
元素用于分发元素。在使用 attachShadow 创建的根中, 元素什么都不做,必须使用 元素。我们如何检测使用哪种方法创建根? - 它更好地阐明了你真正想要什么,这样人们就不会做出错误的假设并为他们投反对票。 -
@nixkuroi 很抱歉投了反对票。我会补充一点。谢谢!!
-
通常人们会使用特征检测而不是版本检测,因为它应该更有帮助......
-
@MikeMcCaughan 很容易检测特征(例如,如果
attachShadow方法存在),但我需要检测根是否是用一种方法或另一种方法(产生的根有差异) .这不是特征检测,它是检测一种类型的实例与另一种类型的实例。假设 v0 和 v1 API 都存在(最新的 Chrome 就是这种情况)。 -
为什么投反对票?我已经更新了这个问题,也许现在它有足够的信息?
标签: javascript html dom web-component shadow-dom