我試圖延長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,因爲很多本地元素都有自己的用戶代理陰影DOM? –
是的遺憾:(這是由工作組在這裏討論的:https://github.com/w3c/webcomponents/issues/110和/ 102。 – Supersharp
好吧,太糟糕了,謝謝 –