javascript - Vad betyder en script-tagg med både src OCH innehåll?


Exempel från Googles +1-knapp:

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

Script-taggen har ett src-attribut och innehåll. Vad betyder detta och hur fungerar det?

Svar #1

Olika webbläsare hanterar detta olika. Vissa kör innehållet endast om src inkluderas utan fel. Vissa kör det efter att ha försökt inkludera src-scriptet, oavsett om det lyckas eller inte. Eftersom detta beteende är opålitligt (och förbjudet i HTML5) bör det undvikas.

Google förlitar sig inte på något specifikt beteende. Eftersom innehållet bara är ett objektsliteral (ett värde), skulle det att köra det inte faktiskt göra något annat än att orsaka ett tyst fel. Googles kod tittar på innehållet i script-taggen själv och justerar sitt beteende baserat på det.

Svar #2

Om ett skriptelement har ett src-attribut måste innehållet ignoreras, alla andra beteenden är icke-konforma.

Det har föreslagits i bloggar (som ett trick) att lägga innehåll i elementet med vetskap om att det inte kommer att utvärderas, och sedan använda DOM-metoder för att få innehållet som en sträng och antingen eval det eller infoga det i ett nytt skriptelement. Ingen av dessa är en bra idé.

Svar #3

Efter att skriptet har laddats, tittar det inuti sin egen skript-tagg för att komma åt dess innehåll.

Det kommer att använda någon kod liknande denna:

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

Med tillstånd av John Resig.

Svar #4

Enligt HTML5-utkastspecifikationen bör <script>-element med src-attribut endast ha kommenterad kod, som är avsedd att ge dokumentation för skriptet. Det verkar dock inte som om Google följer denna specifikation.

Relaterade artiklar