为什么我不能在 Google Chrome 48 中创建自己的自定义组件?

Why can't I create my own custom component in Google Chrome 48?

我已经使用 Polymer 提供的 webcomponents polyfills 构建了一个自定义元素库。它适用于 Firefox 和 Safari。但它在 Chrome 48 中无法使用原生组件支持。如果我使用被黑客入侵的 polyfill 代码不使用本机实现,我可以让它工作...

这是一个例子:

<!DOCTYPE html>
<html>
<head>
  <script>
    var myComp = Object.create(HTMLElement.prototype);
    document.registerElement('my-comp', {prototype: myComp}); 
    myComp.attachedCallback = function () {
      console.log('my-comp attached');
    }
  </script>

</head>
  <body>
   <my-comp></my-comp>
   <p> Just to check that page is loaded</p>
</body>
</html>

我应该在控制台中看到该消息,但没有显示任何内容。在 Chrome 中启用了支持(我可以看到 document.registerElement 是本机的),我的代码已加载并执行(该元素已注册,如果我尝试在控制台中再次注册它,我会收到警告) ,并且回调有效(我可以在控制台手动调用)。

会发生什么?我怎样才能让它发挥作用?

您可以通过在 注册元素之前 附加事件处理程序来使其工作:

var myComp = Object.create(HTMLElement.prototype);
myComp.attachedCallback = function () 
{
  console.log('my-comp attached');
}
document.registerElement('my-comp', {prototype: myComp});