115 votes

Que signifie un script-Tag avec src ET contenu ?

Exemple du bouton +1 de Google :

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
      {"parsetags": "explicit"}
</script>

La balise script possède un attribut src. y le contenu. Qu'est-ce que cela signifie et comment cela fonctionne-t-il ?

65voto

Jeremy Banks Points 32470

Les différents navigateurs traitent cela différemment. Certains n'exécutent le contenu que si le src est inclus sans erreur. Certains l'exécutent après avoir tenté d'inclure le src script, quel que soit le succès. Puisque ce comportement n'est pas fiable (et interdit en HTML5 ), il faut l'éviter.

Google ne s'appuie pas sur un comportement spécifique. Comme le contenu n'est qu'un objet littéral (une valeur), son exécution ne ferait rien d'autre que de provoquer une erreur silencieuse. Le code de Google examine le contenu de la balise script et ajuster son comportement en fonction de cela.

21voto

RobG Points 41170

Si un Élément script a un src le contenu de l'attribut debe sont ignorés, tout autre comportement est non conforme.

Il a été suggéré dans des blogs (comme un hack) de mettre du contenu dans l'élément en sachant qu'il ne sera pas évalué, puis d'utiliser les méthodes DOM pour obtenir le contenu sous forme de chaîne et soit eval ou l'insérer dans un nouvel élément script. Ni l'un ni l'autre ne sont une bonne idée.

13voto

Jim Points 39574

Selon le Projet de spécification HTML5 , <script> éléments avec src Les attributs ne devraient avoir que du code commenté, qui est destiné à donner de la documentation pour le script. Il ne semble pas que Google se conforme à cette spécification cependant.

13voto

James Billingham Points 348

Une fois que le script a été chargé, il regarde à l'intérieur de sa propre balise script pour accéder à son contenu.

Il utilisera un code similaire à celui-ci :

var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);

Avec l'aimable autorisation de John Resig .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X