首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebComponents:未显示Firefox自定义元素

WebComponents:未显示Firefox自定义元素
EN

Stack Overflow用户
提问于 2019-04-22 21:19:29
回答 2查看 404关注 0票数 1

我正在使用web组件的“自定义元素”功能,需要支持旧的浏览器(火狐v60),所以不是通过webcomponent-loader.js加载所有的多填充。基于特征检测的延迟加载自定义元素detection

代码语言:javascript
复制
(function() {
if(!window.customElements){
var ce = document.createElement('script');
ce.type = 'text/javascript';
ce.async = true;
ce.src = 'https://unpkg.com/@webcomponents/custom-elements@1.2.4/custom-elements.min.js';
/**

     * loading "customElement" polyfills wont't fire "WebComponentsReady" event, it will be called when we use
     * "webcomponent-loader.js" but it will load other polyfills("shadow-dom"), so loading the "customElements" polyfill alone
     * based on feature detection and firing "WebComponentsReady" event manually.
     */
  ce.onload = function() {
      document.dispatchEvent(
          new CustomEvent('WebComponentsReady', {bubbles: true}));
  };
  var st = document.getElementsByTagName('script')[0];
  st.parentNode.insertBefore(ce, st);
}
})()

并在加载时手动触发WebComponentsReady事件。注册如下所示的元素

代码语言:javascript
复制
let registerElement = () => {
 if(!window.customElements.get(“wc-button")){
   window.customElements.define(‘wc-button', WCButton);
 }
};

if(window.customElements){
  registerElement();
 } else {
  document.addEventListener('WebComponentsReady', registerElement);
}

WebComponentsReadygot已触发,并且在侦听器回调中已被调用以定义/注册元素,但该元素未在firefox60.6.1esr (64位)的页面中显示或加载

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-22 21:47:08

webcomponents-loader.js会为您做特性检测,而不是等待WebComponentsReady事件

代码语言:javascript
复制
<script src="https://unpkg.com/@webcomponents/webcomponentsjs/webcomponents-loader.js"></script>
<script>
window.WebComponents.waitFor(() => {
   // do stuff that needs the polyfill
})
</script>

有关详细信息,请参阅:

票数 2
EN

Stack Overflow用户

发布于 2019-04-23 02:23:14

只有在实现了自定义元素时,才能扩展HTMLElement (使用polyfill在本地启用)。

因此,只有在加载polyfill之后才能定义<wc-button>自定义元素类。

在您的示例中:

代码语言:javascript
复制
let registerElement = () => {
    if(!window.customElements.get("wc-button")){
         //define the WCButton class here
         class WCButton extends HTMLElement {
             //...
         }
         window.customElements.define(‘wc-button', WCButton);
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55795053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档