@lagudal

Как запустить скрипт гарантированно после загрузки всех элементов страницы, в том числе динамически подгружаемых компонентов?

В двух словах - есть модуль для Magento 2 от Amasty - Mega Menu. В последних версиях обновления разрабы сделали фундаментальные, сделан явный разворот модуля на ui-component-ный подход.
Т.е. компоненты не отрисовываются как раньше в DOM, а подгружаются по мере надобности динамически посредством js.
Все это очень здорово, но есть одна проблема. Есть у меня кастомный яваскрипт, который воздействует на элементы меню в DOM. На новых версиях мега-меню модуля этот скрипт загружается раньше, чем ui-components, и из-за того, что до загрузки скрипта некоторые указанные css селекторы - классы, айдишники - еще отсутствовали на странице, скрипт эти селекторы игнорирует и соответственно не работает.
Никакие манипуляции с отложенным запуском скрипта до полной загрузки страницы не сработали - кроме сильного таймаута - минимум 3 секунды, и это не вариант. Нет разницы, в каком контретно месте размещать скрипт, в начале или в самом конце body. Единственное, когда скрипт работает, это если запустить его из консоли, или если разместить его на странице контента. В обоих случаях он гарантированно сработает после загрузки всех компонентов.
Чтобы решить эту проблему так же "красиво", как amasty обновили свой модуль, надо писать довольно внушительный плагин, и все это ради пары маленьких скриптов, которые до этого обновления отлично работали.
Может быть, есть еще какой то выход? Как еще можно заставить скрипт запуститься после загрузки всех компонентов?
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Не знаю как насчет загрузки всех компонентов, но можно используя MutationObserver отслеживать появление на странице новых элементов и как только нужные для работы вашего скрипта блоки подгрузились сразу запускать сам скрипт.

https://developer.mozilla.org/ru/docs/Web/API/Muta...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы