Beispiel von Googles +1 Button:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Das Skript-Tag hat ein src-Attribut und Inhalt. Was bedeutet das und wie funktioniert es?
Beispiel von Googles +1 Button:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Das Skript-Tag hat ein src-Attribut und Inhalt. Was bedeutet das und wie funktioniert es?
Antworten:
Verschiedene Browser behandeln dies unterschiedlich. Einige führen den Inhalt nur aus, wenn der srcfehlerfrei enthalten ist. Einige führen es aus, nachdem sie versucht haben, das srcSkript einzuschließen, unabhängig vom Erfolg. Da dieses Verhalten unzuverlässig ist (und in HTML5 verboten ist ), sollte es vermieden werden.
Google verlässt sich nicht auf ein bestimmtes Verhalten. Da der Inhalt nur ein Objektliteral (ein Wert) ist, würde die Ausführung nichts anderes bewirken, als einen stillen Fehler zu verursachen. Der Code von Google überprüft den Inhalt des scriptTags selbst und passt sein Verhalten darauf basierend an.
srcAttribut vorhanden ist, und ist eigentlich kein Objektliteral. Dieser Code würde SyntaxErrorbei Ausführung einen "JSON-Text" erzeugen , den das Skript verwendet von selbst später.
s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; Ich glaube, es gibt keine Möglichkeit, den Inhalt eines Skriptknotens abzurufen, bei dem das DOM nicht berührt wird .
Wenn ein Skriptelement ein src- Attribut hat, muss der Inhalt ignoriert werden, jedes andere Verhalten ist nicht konform.
In Blogs (als Hack) wurde vorgeschlagen, Inhalte in das Element einzufügen , da sie nicht ausgewertet werden. Verwenden Sie dann DOM-Methoden, um den Inhalt als Zeichenfolge abzurufen und entweder zu bewerten oder in ein neues Skriptelement einzufügen. Beides ist keine gute Idee.
Gemäß der HTML5-Entwurfsspezifikation sollten <script>Elemente mit srcAttributen nur auskommentierten Code haben, der eine Dokumentation für das Skript liefern soll. Es scheint jedoch nicht so, als ob Google dieser Spezifikation entspricht.
Nachdem das Skript geladen wurde, schaut es in sein eigenes Skript-Tag, um auf seinen Inhalt zuzugreifen.
Es wird ein ähnlicher Code verwendet:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
Mit freundlicher Genehmigung von John Resig .