2017-01-01 2 views
6

У меня есть простой веб-компонент, следующий за последним web components v1 class syntax, он отлично работает в Chrome и Firefox/Edge (с полифоном), но я бы хотел, чтобы он работал в IE11, поэтому мне нужно перераспределить класс. Однако запуск его через babel создает код, который больше не работает в любом браузере.Веб-компоненты, основанные на классе трансляции, с babel

Есть ли способ создать обратно совместимые веб-компоненты с синтаксисом класса или есть предпочтительный способ создания веб-компонентов для максимальной совместимости?

Пример кода -

class TestElement extends HTMLElement { 
    connectedCallback(){ 
    this.innerHTML = "<div>Testing</div>" 
    } 
} 

customElements.define('test-element', TestElement) 

Сообщение об ошибке при использовании transpiled коды -

Uncaught TypeError: Failed to construct 'HTMLElement': Please use the 'new' operator, this DOM object constructor cannot be called as a function.

+0

Это может быть дубликат http://stackoverflow.com/questions/35003413/babeljs-doesnt-transpile-extended-classes-properly, который является дубликатом http://stackoverflow.com/questions/33832646/extending -built-in-natives-in-es6-with-babel - если это так, то в следующий раз попробуйте найти transpile ИЛИ babel extends – mplungjan

+0

Это звучит как основная проблема, меня интересует, как люди работают вокруг этого по отношению к веб-компоненты - или два не работают вместе? – Daaavvy

+0

Обходной путь? http://stackoverflow.com/a/39376819/295783 – mplungjan

ответ

4

Чтобы скомпилировать классы пользовательских элементов с помощью Babel, вы можете использовать этот plugin от Github.

Он будет использовать Reflect.construct() вместо new, что недопустимо с HTMLElement объектами.

4

Одним из решений является использование нативной регулировочная шайба доступно с этим polyfill https://github.com/webcomponents/custom-elements

Это не но все же хотел бы найти более чистое решение.

+0

Спасибо, кажется, это на самом деле дубликат http://stackoverflow.com/questions/39477678/why-does-v1-web-component-customelements-define-throw- typeerror – Daaavvy

+0

работает отлично - после многих проблем с другими решениями. Кстати, они говорят: «Мы также работаем над некоторыми усовершенствованиями этого подхода, которые улучшат реализацию и автоматически обнаружат, если это необходимо». Интересно, что firefox не нуждается в прокладке. – sasha

Смежные вопросы