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