2016-10-21 8 views
8

私は今、polyfillでカスタム要素v1を使っています。クロム54(ネイティブv1の実装と最初のバージョン)私の要素を初期化するときにエラーを投げ始めた:'Document'に 'createElement'を実行できませんでした。結果には子がありません。

のDOMExceptionは:「ドキュメントの」オン「のcreateElement」を実行できませんでした:結果は子供

を持っていなければなりません

問題のある行は単純です:

let el = document.createElement('my-custom-element'); 

答えて

6

Chromeのネイティブ実装はポリフィルはなかった仕様要件を強制しているように見えます。スペックの「Requirements for custom element constructors」セクションによると:これはcreateElementのかはcreateElementNSメソッドを使用して、消費者の期待に違反するとして

要素は、任意の属性や子供を得てはなりません。

私が作成しようとしていた要素は、そのコンストラクタ内に子を追加しました。

ソリューションは仕様の勧告に従うことでした:一般的に

を、作業は特に可能フェッチリソースやレンダリングに関わる仕事な限りconnectedCallbackに延期されなければなりません。ただし、connectedCallbackは複数回呼び出すことができます。したがって、本当に1回の初期化作業では、2回の実行を防ぐためにガードが必要です。

つまり、接続されたコールバックに子を追加し、最初の接続時に要素が確実に初期化されるようにフラグを使用します。

関連する問題