Ajouter reporter ou asynchrone attribut généré de façon dynamique des balises de script via javascript
Je suis dynamiquement mettre une balise de script pour les DOM de ma page comme ceci:
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
Cela devrait générer quelque chose comme ceci:
<script src="https://www.youtube.com/iframe_api"></script>
Je veux juste le mettre dans un reporter ou asynchrone de cette balise de script comme ceci:
<script src="https://www.youtube.com/iframe_api" defer async></script>
Alors, comment dois-je faire cela à l'aide de javascript?
OriginalL'auteur rahulserver | 2016-12-22
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin d'ajouter
async
à votrescript
tag, depuis que l'attribut est activé par défaut et scripts charger de manière asynchrone, à moins dit de ne pas.Comme pour
defer
, tout comme vous changez lasrc
attribut en JavaScript, vous pouvez également activer qu'on aime tant:Alternativement, vous pouvez utiliser
setAttribute()
pour cela.Que diriez -
tag.defer = true
?OriginalL'auteur Jon Uleis
J'ai créé un démo(besoin de l'essayer avec cache du navigateur est désactivé), où je suis en train de faire différer les travaux pour dynamiquement ajoutés script.
Nous avons donc deux scripts:
console.log('big')
à la fin. Il est à l'intérieur de la section de tête et a reporter.console.log('small')
. Il sera fixé de manière dynamique à la section de corps à reporterMon attente est à la fois scripts ne sera pas bloquant l'analyse HTML, va être chargé de manière asynchrone et seront exécutés dans l'ordre:
Mais en réalité, la séquence est comme suit:
Petit script est en cours de chargement beaucoup plus rapide, parce que sa taille est beaucoup plus petite et il n'attend pas big.js pour être chargé et exécuté en premier.
Pourriez-vous les gars expliquer un tel comportement?
OriginalL'auteur user1740326