2015-07-03 13 views
10

Tekrar edersem kodumu yalnızca ateşleyebileceğim bir sorun yaşıyorum. Aşağıdaki örneğe bakınız. Kod iki koddan birini aldığımda kod hemen hemen aynı olsa da, kod sadece biriyle çalışmaz, ancak her iki betiği de çalıştırırsam, ancak iki yerine yalnızca bir tanesini kullanır. Onu bir ver.Javascript'im neden sadece kod tekrarlandığında yanıyor?

Bu işleri (ama sadece bir senaryo yangınları):

<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> 

Bu işe yaramazsa:

<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> 

Ya da bu:

<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> 

herkes herhangi bir fikir var mı? Bu kesinlikle bir süredir gördüğüm en tuhaf şey. Bu işleri

+2

bu konuda 2005 –

+0

https://stackoverflow.com/questions/802854/ beri tarayıcılarda bile hala geçerli olduğunu bilir neden benim ilk ipucu vardır Neden-document-write-added-a-bad-practice – birdspider

+0

'

3

sayesinde:

<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> 

çökmesini js önlemek için, ben iki dizeleri içine <script> etiketi ayrılmışlar.

11

Sorun, komut dosyası etiketinizin bozuk olmasıdır.<script> etiketi, </script> tarafından kapatılmalıdır. Şimdi burada
olur:

Örnek 1

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

şu biçimlendirme HTML üretir: onlar bulana kadar Genelde

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

tarayıcılar bir <script> blok yürütmek yok ilgili </script>. Yukarıdaki örnekte açık bir kapatma etiketi yoktur, böylece tarayıcı etiketi göz ardı eder.

Örnek 2

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

aşağıdaki çıktıyı üretir: dinamik olarak yazılan komut dosyası etiketi kapalı değil

<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> 

Bildirim söyledi. Tarayıcı, bu etiketi işaretlemede ikinci </script> ile eşleştirecektir; Aradaki her şey (yanlış) bu etiketin bir parçası olur.

Çözüm

document.write kullanarak, sen <script> etiketleri düzgün yakın olduğundan emin olun. Ancak, JavaScript bloğu içinde olduğu gibi </script>'u kullanamazsınız, çünkü komut dosyası bloğunun sonunu bildirir. Aşağıdaki hile kullanabilirsiniz: document.write kullanmayan

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

Not: Birisi tarayıcının sözdizimi hatalarını neden yükseltmediğini merak ediyorsa, cevap şudur: tarayıcı "src" özelliği mevcut olduğunda komut dosyası etiketinin içeriğini yok sayar. –

İlgili konular