Я пытаюсь продлить HTMLOptionElement
,Расширение <option>
<template id="cOptionTemplate">
<content></content>
</template>
<select>
<option is="custom-option">Test</option>
</select>
var cOption = document.registerElement('custom-option', {
prototype: Object.create(HTMLOptionElement.prototype, {
createdCallback: {
value: function() {
var template = document.getElementById("cOptionTemplate")
var clone = document.importNode(template.content, true);
this.createShadowRoot().appendChild(clone);
}
},
attributeChangedCallback: {
value: function (attrName, oldVal, newVal){
switch(attrName){
case "attr1":
console.log(this);
}
}
}
}),
extends: "option"
});
Вот a demo кода.
но очевидно, что это не работает, поскольку у него уже есть агент пользователя shadowRoot?
Uncaught InvalidStateError: Failed to execute 'createShadowRoot' on 'Element': Shadow root cannot be created on a host which already hosts an user-agent shadow tree.
Я никогда не видел эту ошибку, и я думал, что она позволяет вам прикрепить несколько теневых корней. Почему это происходит, и есть ли способ заставить его работать?
Означает ли это, что теперь я могу только прикрепить новую теневую DOM к пользовательским элементам, потому что у многих собственных элементов есть собственный пользовательский агент shadow DOM? –
Да, к сожалению :(Об этом говорила рабочая группа: https://github.com/w3c/webcomponents/issues/110 и/102. – Supersharp
Ну что ж, все равно спасибо. –