Асинхронная загрузка скриптов defer/async

Главные вкладки

Аватар пользователя z01L z01L 26 мая 2017 в 11:19

Приветствую всех, столкнулся с такой задачей, необходимо загружать блокирующие скрипты асинхронно. Когда прописываю параметр defer, возникает ошибка из-за инлайновых скриптов, которые используют jquery, а именно drupal.settings, инлайновые скрипты нельзя грузить через defer.

При попытке подгрузить drupal.settings после загрузки страницы в функции "DOMContentLoaded", перестает работать admin menu и некоторые другие модули. Даже если все остальные скрипты грузятся синхронно со всей страницей как обычно, а я в html.php вырезаю drupal.settings и гружу его позже в функции "DOMContentLoaded", всё равно ни чего не работает, при этом ошибок не выдаёт, не понятно почему, ведь последовательность загрузки не нарушается. При обычных условиях параметры drupal.settings так же грузятся после всех скриптов внизу.

Вот функция в html.php:

  <script>
    window.addEventListener('DOMContentLoaded', function() {
        (function($) {
                <?php echo $outScript[1][1]; ?> // $outScript вырезанный из $scripts drupal.settings
        })(jQuery);
    });
</script>

Асинхронная загрузка работает только в том случае, если я копирую весь drupal.settings во внешний файл, подключаю его в theme.info, а из $scripts убираю совсем, и добавляю атрибут defer ко всем скриптам, тогда и ошибок нет и admin menu работает и все остальные скрипты которые используют эти параметры, но это в качестве эксперимента, ведь в файле он статический и не меняется.

Кто нибудь с этим заморачивался?