测试对自定义内置元素的支持

Test support for customized built-in elements

有没有办法测试对自定义内置元素与自主自定义元素的支持?使用 (‘customElements’ in window) like in this answer 测试对 WebComponents v1 支持的方法,但我还没有找到任何有助于确定对 CustomElements 的更详细支持的方法。

要测试该功能,您可以:

  1. 定义自定义的内置元素。
  2. 尝试创建它。
  3. 看是否抛出异常

示例:

var CustomBuiltinSupport = false
try {
    class FakeButton extends HTMLButtonElement {}
    customElements.define( 'fake-button', FakeButton, { extends: 'button' } )
    new FakeButton
    CustomBuiltinSupport = true
} 
catch ( e ) {
    console.log( e )
}
console.info( 'Custom Builtin Element Support: ', CustomBuiltinSupport )

您可以创建自定义的内置元素并检查其 constructorname 属性:

customElements.define('test-el', class TestEl extends HTMLDivElement {}, { extends: 'div' })
let supportsCBI = document.createElement('div', {is: 'test-el'}).constructor.name === 'TestEl'
console.log(supportsCBI)

您可以检查 属性 extends 是否被读取:

let supportCustomizedBuiltInElements = false

customElements.define('some-element', SomeElement, { 
    get extends () { 
        supportCustomizedBuiltInElements = true
    } 
})

我认为检查 createElement 的选项参数是否被使用就足够了。这样做的好处是它实际上并没有在 CustomElement 注册表中定义不必要的自定义元素。

    let supports = false;
    document.createElement('div', {
      get is() {
        supports = true; 
      }
    });