2010-09-15 64 views
-2

鑑於一段代碼工作在Firefox上,但不是在Internet Explorer中。在IE中,它表示COMSCORE沒有定義。腳本加載錯誤

document.writeln('<!-- Begin comScore Tag -->'); 
document.writeln('<sc'+'ript src="http://someURL/beacon.js">'); 
document.writeln('</sc'+'ript>'); 

document.writeln('<sc'+'ript>'); 
document.writeln(' COMSCORE.beacon({'); 
document.writeln(' c1:2,'); 
document.writeln(' c2:7290414,'); 
document.writeln(' c3:"",'); 
document.writeln(' c4:"",'); 
document.writeln(' c5:"",'); 
document.writeln(' c6:"",'); 
document.writeln(' c15:""'); 
document.writeln(' });'); 
document.writeln('</sc'+'ript>'); 

但是下面的代碼在兩個瀏覽器中都起作用。

<script> 
   document.write(unescape("%3Cscript src='http://someURL/beacon.js' %3E%3C/script%3E")); 
</script> 

<script> 
 COMSCORE.beacon({ 
   c1:2, 
   c2:7290414, 
   c3:"", 
   c4:"", 
   c5:"", 
   c6:"", 
   c15:"" 
 }); 
</script> 

基本上在這兩種情況下,我特林加載外部JavaScript文件,並試圖使用該定義的變量。我明白,在第一種情況下,錯誤可能是由於JS文件的異步加載。但是

1)爲什麼它在Firefox中工作正常。兩個瀏覽器中的JS文件加載機制是否有區別

2)爲什麼它在第二種情況下在IE中工作。該代碼嘗試以與第一種情況相同的方式工作。如果你一定要

+0

你爲什麼寫腳本這樣? – 2010-09-15 13:10:36

+0

如果直接包含'script'標籤而不寫出來會發生什麼? – 2010-09-15 13:11:01

+7

看起來像是對我的注射攻擊:/ – 2010-09-15 13:11:48

回答

0

試試這個:

var comScoreText = '<!'+'-- Begin comScore Tag -->'; // not really interesting to write this comment, but if you do, escape it! 
comScoreText += '<script src="http://someURL/beacon.js"><\/script>'; // you only need to escape the end tag's slash 
document.write(comScoreText); // will load the script now 
document.write('<script>if (COMSCORE) COMSCORE.beacon({ c1:2,c2:7290414,c3:"",c4:"",c5:"",c6:"",c15:""})<\/script>'); 

,或者如果你需要一個變種:

document.write('<script>if (COMSCORE){ var var1= 7290414; COMSCORE.beacon({ c1:2,c2:var1,c3:"",c4:"",c5:"",c6:"",c15:""})}<\/script>'); 

var var1 = 7290414 
document.write('<script>if (COMSCORE) COMSCORE.beacon({ c1:2,c2:'+var1+',c3:"",c4:"",c5:"",c6:"",c15:""})<\/script>');