2015-07-03 10 views
10

Ich habe ein Problem, bei dem ich meinen Code nur dann aktivieren kann, wenn ich ihn wiederhole. Siehe das folgende Beispiel. Während der Code fast identisch ist, wenn ich eines der beiden Skripte herausnehme, funktioniert der Code nicht mit nur einem Code, aber wenn ich beides ausführe, wird das Skript gut, aber nur eins statt zwei. probieren Sie es aus.Warum wird mein Javascript nur ausgelöst, wenn der Code wiederholt wird?

Das funktioniert (aber nur ein Skript Feuer):

<script type="text/javascript"> 
var url = window.location.href + ""; 
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"/>'); 
</script> 

<script type="text/javascript"> 
var url = window.location.href + ""; 
document.write('<script type="application/javascript" src="https://testdomain.com/mik?add=2140535&mik=' + url + '"/>'); 
</script> 

Dies funktioniert nicht:

<script type="text/javascript"> 
var url = window.location.href + ""; 
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"/>'); 
</script> 

Oder diese:

<script type="text/javascript"> 
var url = window.location.href + ""; 
document.write('<script type="application/javascript" src="https://testdomain.com/mik?add=2140535&mik=' + url + '"/>'); 
</script> 

Hat jemand irgendwelche Ideen? Das ist definitiv das seltsamste Ding, das ich seit einer Weile gesehen habe.

Danke,

+2

do document.write nicht benutzen, ist mein erster Hinweis, wer weiß, warum das so ist sogar noch gültig in Browsern seit etwa 2005 –

+0

https://stackoverflow.com/questions/802854/ why-is-document-write-adjusted-a-bad-practice – birdspider

+0

Was ist vor der ersten Instanz von '

3

Dies funktioniert:

<script type="text/javascript"> 
var url = window.location.href + ""; 
document.write('<script type="application/javascript" src="https://testdomain.com/mik21?add=2140535&mik21=' + url + '"></scr'+'ipt>'); 
document.close(); 
</script> 

js Um zu verhindern, abstürzt, habe ich den <script>-Tag in zwei Strings aufgeteilt.

11

Das Problem ist, dass Ihre Skript-Tag ist gebrochen.Ein <script> Tag muss durch </script> geschlossen werden.
Hier ist, was passiert:

Beispiel 1

<script> 
    document.write('<script src="test.js"/>'); 
</script> 

Erzeugt das folgende Markup HTML:

<script> 
    document.write('<script src="test.js"/>'); 
</script> 
<script src="test.js"> 
    </body> 
    </html> 

Im Allgemeinen Browser ausführen keinen <script> Block, bis sie das finden entsprechende </script>. Im obigen Beispiel gibt es kein explizites schließendes Tag, daher ignoriert der Browser das Tag.

Beispiel 2

<script> 
    document.write('<script src="test.js"/>'); 
</script> 
This HTML will be consumed 
<script> 
    document.write('<script src="test.js"/>'); 
</script> 

erzeugt die folgende Ausgabe:

<script> 
    document.write('<script src="test.js"/>'); 
</script> 
<script src="test.js"> 
    This HTML will be consumed 
    <script> 
    document.write('<script src="test.js"/>'); 
</script> 

Beachten Sie, dass der dynamisch geschriebene Skript-Tag nicht geschlossen ist. Der Browser wird dieses Tag mit dem zweiten </script> im Markup übereinstimmen; alles dazwischen (falsch) wird Teil dieses Tags.

Lösung

Wenn document.write verwenden, stellen Sie sicher, dass Sie <script> Tags richtig schließen. Beachten Sie jedoch, dass Sie </script> nicht wie in JavaScript-Code verwenden können, da dies das Ende des Skriptblocks signalisiert. Sie können den folgenden Trick verwenden:

<script> 
    document.write('<script src="test.js"><\/script>'); 
</script> 
+2

Hinweis: Wenn sich jemand fragt, warum der Browser keine Syntaxfehler verursacht, lautet die Antwort: der Browser ignoriert den Inhalt des Skript-Tags, wenn das 'src'-Attribut vorhanden ist. –

Verwandte Themen