5

これに構造的に似たカスタム要素があり<my-el>ます (純粋に静的で、サーバーでレンダリングされた HTML):

<my-el>
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
</my-el>

connectedCallbackChrome はカスタム要素の子要素の可用性を保証しないためHTMLParsedElement、次の手順を使用して基本的にカスタム要素の初期化を遅らせるものを使用しています。

  1. 要素 (または任意の祖先要素) が を持っているかどうかnextSibling(この場合、パーサーはおそらく渡されたmy-el)、またはDOMContentLoadedに到達したかどうか (別名document.readyState !== 'loading') をテストします。
  2. 上記のいずれにも当てはまらない場合は、上記の条件を再確認する をMutationObserverにセットアップします。childList

概説された戦略に現在残っている問題はMutationObserver、これが利用可能な HTML であるときに が起動される可能性があることです。

<my-el>
  <div>a</div>
  <div>b</div>
</my-el>

それともこれでも

<my-el>
  <div>a</div>
</my-el>

そのような場合、MutationObserver は数回起動され、ハンドラー</my-el>は実際にいつ終了したかを知ることができません。

質問:divこのようにすべての内部要素をラップすると、この問題が解決するかどうかは誰にもわかりません:

<my-el>
  <div>
    <div>a</div>
    <div>b</div>
    <div>c</div>
    <div>d</div>
  </div>
</my-el>

言い換えれば、この構造に対してミューテーション オブザーバーが起動したときに、すべての子孫ノードを含めて、ラッピングされた子 div が完全に利用可能であると確実に想定できますか?

4

0 に答える 0