2010-06-06 5 views
10

Edit: Als Andrew Moore wies darauf hin, dass diese Frage ein Duplikat von Two separate script tags for Google Analytics? ist Also sollte diese Frage gelöscht werden, um platter Stack Overflow zu vermeiden, es sei denn, es gibt einen Punkt in diesem zu halten, da es wahrscheinlich in etwas anderen suchen wird.Welchen Unterschied macht es, mehrere Skriptblöcke auf einer Webseite zu verwenden?

Welchen Unterschied macht es, mehr als einen Skriptblock auf einer Webseite zu verwenden? Ich habe den Standardcode für Google Analytics als Beispiel eingefügt, und ich habe das gleiche Muster an anderen Orten verwendet. Warum wird dieser Code in zwei separate Skriptblöcke aufgeteilt, anstatt nur einen einzigen zu verwenden?

<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
    try{ 
     var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 
+0

Ich weiß, der GA-Code ist nur ein Beispiel, aber ich denke, dass Tag kann lohnen, z. für Leute, die nach der gleichen Sache suchen. –

+0

Duplizieren. Ich weiß, dass ich die gleiche Frage schon beantwortet habe ... – Guffa

+1

mögliches Duplikat von [Zwei separate Skript-Tags für Google Analytics?] (Http://stackoverflow.com/questions/1210034/two-separate-script-tags-for- google-analytics) –

Antwort

5

Die zweite <script> enthält Code, der von google-analytics.com/ga.js geladen wird.

Nicht zurückgestellte Skripte werden in der Reihenfolge ausgeführt, in der sie im DOM vorhanden sind.

Die erste <script> injiziert eine neue <script> nach sich (mit dem src zeigt auf Googles ga.js), die unmittelbar lädt und ausführt - erst dann wird der zweite <script> ausgeführt werden sollen.

+0

+1 Ich habe es jetzt, nachdem ich es zweimal gelesen habe, mein schlechtes. – Ben

2

In Ihrem Beispiel der erste Skriptblock verwendet document.write ein anderes Skript Element zu schreiben, die ein externes Skript lädt und dann das zweite Skript Element verwendet in diesem externen Skript definiert Dinge. Ich bin mir ziemlich sicher, dass das Teilen in zwei Skriptblöcke notwendig ist, damit es funktioniert.

Wenn Sie nicht solche komischen Tricksereien verwenden, macht das Setzen mehrerer Skriptblöcke in einer Reihe normalerweise nichts Besonderes. Es ist nützlich, sie in verschiedenen Teilen der Seite zu verwenden, wenn Sie Skripts ausführen möchten, während das Dokument geladen wird. Wenn Ihre Seite sehr lang ist, möchten Sie vielleicht ein Skript ausführen, während es noch geladen wird, um die Dinge so schnell wie möglich zu initialisieren. Das Ersetzen von Elementen durch Widgets sollte so früh wie möglich erfolgen, um zu verhindern, dass Dinge herumspringen, wenn die Seite schließlich geladen wird.

1

Wenn der Code in den ersten Blöcken mit einer Ausnahme endet, funktioniert auch der zweite Teil.

+0

Wahr! Wahrscheinlich nicht, warum Google es getan hat (ein 'try' Block würde das lösen), aber es ist ein vollkommen gültiger Punkt ... –

+1

-1: Nicht der Grund, warum dies in zwei Blöcken getrennt ist. Und was du beschreibst, ist eine schlechte Übung (es öffnet den Script Error Dialog im IE). –

+0

Andrew: Grund für einen Downvote. Die ursprüngliche Frage besteht aus zwei Teilen: "Welchen Unterschied macht es, mehr als einen Skriptblock auf einer Webseite zu verwenden?" und die Frage nach dem Google-Code. Diese Antwort mag den zweiten Teil nicht ansprechen, aber sie betrifft sicherlich den ersten Teil und ist etwas, von dem ich nicht weiß, dass es weithin bekannt ist und von anderen Antworten nicht erwähnt wird, also würde ich sagen, dass es sowohl hilfreich als auch relevant ist. –

5

<script> Tags werden nacheinander ausgeführt. Ein <script> Block kann nicht ausgeführt werden, wenn der vorherige nicht ausgeführt wird.

Die erste <script>-Tag ist verantwortlich für die Erstellung der Google <script>-Tag, die die externe js laden wird. Nachdem der erste <script> Ausführung beendet ist, sucht der DOM wie folgt aus:

<script></script> <!-- First Script Tag --> 
<script></script> <!-- Google Injected Script --> 
<script></script> <!-- Second Script Tag --> 

Dies garantiert, dass die zweite <script> Tag ausgeführt wird erst die .js fertig geladen ist. Wenn der erste und der zweite <script> kombiniert würden, würde dies dazu führen, dass die Variable _gat undefiniert ist (da das von Google injizierte Skript erst dann geladen wird, wenn das erste Skript ausgeführt wird).