Имея код ниже:Defer атрибут и OnLoad событие
<html>
<head>
<script>
function elem_onload() {
console.log("elem_onload");
};
</script>
</head>
<body onload="elem_onload()">
<script type="text/javascript" src="script.js" defer></script>
</body>
</html>
script.js:
console.log("external script");
атрибут Defer не кажется, работает. Выходной сигнал:
external script
elem_onload
ли с атрибутом отсрочки или без него. Shoudn't it
elem_onload
external script
с отсрочкой определено?
Дублированный ответ !?
Я хотел бы заявить, что мой ответ не дубликат
How exactly does <script defer=“defer”> work?
ссылаются, рекомендуется ответ о инлайн сценарии, где поведение браузера ясно для меня - это просто игнорирует defer
. Мой вопрос о внешнем скрипте, в этом случае браузер должен выполнить Внешний Отложенный скрипт
после того, как документ был разобран
в документации государств, следовательно, после onload
события.
Так я жду подходящего ответа ...
[4.21.1 Элемент сценария] (https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer): «Существует три возможных режима, которые могут быть выбраны с использованием этих атрибутов. Если присутствует асинхронный атрибут, скрипт будет выполнен, как только он будет доступен, но не будет блокировать дальнейший синтаксический анализ страницы. ** Если атрибут async отсутствует, но присутствует атрибут defer, тогда выполняется сценарий когда страница закончила синтаксический анализ **. Если ни один из атрибутов не присутствует, сценарий извлекается и выполняется немедленно, прежде чем пользовательский агент продолжит анализ страницы « – Andreas
Итак, вы предполагаете, что событие« onload »всегда запускается, когда страница была проанализирован и, следовательно, после отложенного сценария? – Mulligan81
Попробуйте установить 'type' и' src' '' при закрытии 'elem_onload' – guest271314