Спецификация (сейчас) диктует, что элемент script
, который не вставлен парсером, является асинхронным;свойство async
не имеет отношения к элементам script
без вставки парсера:
Третий - это флаг, указывающий, будет ли элемент " force-async ".Изначально script
элементам должен быть установлен этот флаг.Он сбрасывается синтаксическим анализатором HTML и синтаксическим анализатором XML для script
элементов, которые они вставляют.Кроме того, всякий раз, когда к элементу сценария, для которого установлен флаг « force-async », добавляется атрибут содержимого async
, флаг элемента « force-async » должен быть не установлен.
Наличие атрибута контента async
, конечно, означает, что скрипт будет выполняться асинхронно.Язык спецификации , кажется, оставляет возможность принудительно выполнять синхронное выполнение скрипта (устанавливая атрибут и затем удаляя его), но на практике это не работает и, вероятно, является лишь немного неопределенностью в спецификации,Не вставленные парсером script
элементы являются асинхронными.
Это заданное поведение - то, что всегда делали IE и Chrome, Firefox делали годами, а также текущая Opera (я понятия не имею, когда он изменился сстарое поведение в ответе, связанном выше).
Это легко проверить:
var script = document.createElement("script");
script.src = "script.js";
console.log("a");
document.body.appendChild(script);
console.log("b");
... с script.js
, являющимся
console.log("script loaded");
... будетlog
a
b
script loaded