MutationObserver в «новом» календаре Google

1

У меня есть расширение браузера для Календаря Google, где я наблюдаю за DOM для сбора событий, которые просматриваются с помощью:

// content.js
const calendarContainer = document.getElementById('gridcontainer');
const observer = new MutationObserver(mutations => {
  // just for test
  console.log('content', mutations);
}

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

Он корректно работает в "классическом" календаре, но с момента последнего обновления Material Design структура DOM отличается. Итак, я попытался соответствующим образом изменить наблюдаемый элемент:

// content.js
const calendarContainer = document.querySelector('div[role="main"]');

Несмотря на то, что я переключаюсь между просмотром недели/дня, расписанием или между датами, я не могу получать никаких новых мутаций, кроме первой загрузки страницы (после обновления). Если вы посмотрите на исходный код через Developer Tools, вы увидите, что DOM меняется, но Observer каким-то образом его не видит.

Какие-нибудь мысли?

  • 2
    Это потому, что контейнер, который вы наблюдаете, заменен. Вы должны соблюдать уровень выше, например #mainbody
  • 0
    Да, это сработало, спасибо! Я изменил его, чтобы наблюдать родительский элемент.
Теги:
google-chrome-extension
browser-extension
mutation-observers
google-calendar-api

1 ответ

1
Лучший ответ

Согласно комментарию wOxxOm, я изменил его, чтобы наблюдать за parentElement, который не заменяется между разными вызовами, и он работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню