Нужно добавить атрибут defer
при загрузке страницы всем <script>
-ам. Таким образом хочу ускорить загрузку страницы.
Данный скрипт не срабатывает:
var script = document.createElement('script');
script.setAttribute("defer", "defer");
Как это сделать правильно?
[].slice.call(document.getElementsByTagName('script')).forEach(function (script) {
script.setAttribute("defer", "defer");
})
Никак.
Проблема в том, что и document.scripts
, и document.getElementsByTagName('script')
вернут только те скрипты, что уже появились в DOM. То есть те, которые уже выполнены, если у них изначально не было async
и defer
.
Соответственно, если поставить скрипт, добавляющий атрибут, первым в списке скриптов, то он не увидит других скриптов. Если поставить последним - то остальные скрипты к моменту запуска скрипты уже будут выполнены.
Попытка "пуститься во все тяжкие" и поменять document.documentElement.innerHTML
ничем хорошим не кончится, хотя бы той же самой причине: остальных скриптов опять-таки ещё не будет в innerHTML
.
Можно попытаться провернуть это через плагин к браузеру, но поговаривают, что и это не особо перспективный вариант.
for(let script of document.scripts) script.setAttribute('defer', 'defer')
Я так понял задача выдать всем скриптам на странице defer
? вот пример на jquery
var arr = $("script");
for (var i=0;i < arr.length;i++) {
$(arr[i]).attr("defer","defer");
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу поменять стиль элементу на странице, который соответствует выбранному (у них одинаковый параметр idEv)Пробую так:
Не могу понять как вывести в цикле те компоненты у которых одноименное состояние trueДопустим у меня есть компонент SettingMain и SettingPassword, у первого...