Я работаю над механизмом динамической загрузки набора js-файлов, между которыми есть некоторые зависимости (например, мой код после начальной загрузки после jquery).Я определил вложенную структуру типа json с отношениями зависимостей, а затем вызвал механизм загрузки сценариев на основе Promise (благодаря некоторым постам здесь), который делает асинхронные вызовы для загрузки файлов js того же уровня и вызывает рекурсивный скрипт загрузки для файлов jsкоторые имеют зависимости между ними.
Все файлы правильно добавлены в HEAD в том порядке, в котором я их ожидаю.Для зависимостей я вызываю загрузку файла, для которого есть зависимость в обработчике onload его предшественника.Однако это, похоже, не гарантирует, что загруженный js-код доступен для использования (т. Е. Не кажется, что добавление завершено и код был выполнен - например, определения var / const не были доступны во время вызова onloadоснованный на точках останова, и т.д ... в отладчике - я думаю, это кажется правильным).
Итак, добавлен mutationobserver, который обнаружил, что файлы были добавлены в DOM (например, изменение childList на HEAD).Однако, похоже, что мутация вызывается до того, как код станет фактически доступным для использования.
Почему я так думаю?я поместил точки останова, журналы консоли с информацией о времени и т. д. в точку, где mutationObserver указал, что произошло изменение, соответствующее вставке вновь загруженного скрипта (например, запуск наблюдателя из-за добавления скрипта), но при этомК тому же, код (например, некоторое определение var) не был доступен в глобальных переменных в отладчике.
Таким образом, вопрос не является конкретным в отношении моего кода, а скорее в том, можно ли узнать, что динамически включенный код js запущен и доступен для использования.Для моего собственного кода я могу справиться с этим с помощью других механизмов, но для сторонних js-файлов я не хочу к ним прикасаться.
Так, более конкретно, не похоже, что фактическое добавление кода в DOM HEADв точке, обнаруженной mutationObserver, фактически означает, что код был выполнен и что он выглядит из других сообщений (например, Выполнение динамически загружаемых файлов JS или , загрузка и выполнение порядка сценариев ) что фактическое выполнение кода в некоторой степени асинхронно в зависимости от того, что на самом деле делает браузер.
Буду весьма признателен за любые мысли по поводу общего понимания процесса.
Спасибо,