LoginSignup
0
0

SPAから動的に挿入されるDOMを取得する

Posted at

chromeの拡張機能開発で、SPAからDOMを取得する際にハマったので、メモとして残しておきます。

問題点

例えば、以下のように、同期的に挿入されるsampleクラスがあったとします。

<div class="sample">
    sample
</div>

最初は、画面の描画が完了したら、DOMを取得しようと思いました。
しかし、結果はnullでした。

window.onload = function() {
    let sample = document.querySelector(".sample")
    console.log(sample.textContent)
}

なぜか

HTML、CSS、JSが読み取られた時にonloadは発火するが、SPAはそこから画面を組み立てるので、取得できなかったというわけです。

解決策

DOMの変更を検知できる、MutationObserver1を使います。

これを使うことにより、DOMが挿入されたときに要素を取得することができます。

let observer = new MutationObserver(function() {
  let sample = document.querySelector(".sample")
  if (sample) {
    console.log(sample.textContent)
    observer.disconnect()
  }
})

observer.observe(document, {childList: true, subtree: true});

参考リンク

  1. https://developer.mozilla.org/ja/docs/Web/API/MutationObserver

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0