(最初来自https://github.com/w3c/webcomponents/issues/392,移至此处)
我正在开发一个库(至少现在位于http://infamous.io),我正在其中创建一组自定义元素来渲染 3D 场景。该库注册了两个元素,[<motor-scene>](https://github.com/infamous/infamous/blob/master/src/motor-html/scene.js)
并且<motor-node>
. 对于不支持的浏览器,该库依赖于这个 document.registerElement
polyfill。
我有一个小问题。当我在 Meteor 应用程序中使用自定义元素时,一切正常<body>
,但是当我尝试使用静态 HTML 页面和手动包含在<head>
,它会失败并且无法按预期工作。我不确定我是否做错了什么并且对自定义元素一无所知,或者 API 是否存在问题。
要查看工作演示,只需
git clone git@github.com:trusktr/site.git
cd site
git checkout infamous-motor-html # it's on this branch.
npm install
meteor # meteor is really easy to install, meteor.com
# visit localhost:3000
结果如下所示,蓝绿色和粉红色元素在 3D 空间中按预期定位:
现在,如果您查看public
文件夹,您将在html-demo.html
. 您可以使用 直接在浏览器中打开它file://
,或者localhost:3000/html-demo.html
在运行 Meteor 应用程序时访问。我已经仔细检查过,我相信我正在做与 Meteor 版本相同的事情,但我根本无法得到预期的结果,它看起来像这样:
我不确定问题是什么,以及为什么它在 Meteor 版本中有效(Meteor 1.3 使用 Babel 编译代码)并且在静态版本中不起作用(也通过 Webpack 使用 Babel 编译)。
我在调用中添加console.logs
了createdCallback
, attachedCallback
, etc 方法(例如)。这在控制台中显示了两种不同的输出顺序。registerElement
Meteor 版本的输出:
静态版本的输出:
会不会有加载顺序问题?registerElement
关于何时应该调用是否有任何规则?我尝试将静态脚本放在页面末尾,这会更改输出顺序,但仍然呈现相同的内容(损坏,不像 Meteor 版本)。
有任何想法吗?自定义元素有什么我不知道的吗?为什么静态示例与 Meteor 示例看起来不一样?
注意:当使用WebReflection/document-register-element polyfill时,我在 Meteor 和 static 之间得到相同的不一致行为,而当不使用时。