2013-12-18 48 views
4

我正在嘗試新的廣告服務,並且據我所知他們沒有提供加載廣告的功能界面。我們希望根據用戶的屏幕尺寸顯示不同的廣告尺寸,並且此服務要求您爲每種尺寸加載不同的.js URL。爲什麼我需要使用document.write而不是DOM操作方法?

我最初試圖寫:

<script type="text/javascript"><!-- 
    var dochead = document.getElementsByTagName('head')[0]; 
    var newscript = document.createElement('script'); 
    newscript.type = "text/javascript"; 
    newscript.src = '//ads-by.madadsmedia.com/tags/22430/9194/async/' + (screen.width >= 1360 ? '160' : '120') + 'x600.js'; 
    dochead.appendChild(newscript); 
    //--> 
</script> 

,但我只是得到了一個空白頁。我查看了Chrome開發人員工具,似乎正在正確加載他們的腳本。他們的腳本從谷歌加載其他腳本,並且他們也出現在DOM中。但是沒有廣告圖片。

當我改變了我的腳本:

<script language="JavaScript" type="text/javascript"> 
var prot = document.location.protocol; 
var adwidth = (screen.width >= 1360 ? '160' : '120'); 
document.write('<script language="JavaScript" type="text/javascript"'); document.write('src="'+prot+'//ads-by.madadsmedia.com/tags/22430/9194/async/'+adwidth+'x600.js">'); document.write('<\/scr' + 'ipt>'); 
</script> 

一切正常。我通常不喜歡使用document.write,我想知道爲什麼它需要在這種情況下?廣告服務的腳本廣泛使用document.write,這是爲什麼?

+0

對不起,回答這麼晚了,但我認爲這是注意到的你在第一行有一個Javascript語法錯誤。而不是'<! - ',你應該有'// <! - '。 –

+0

我們不再使用該廣告服務,因此這是毫無意義的。不管怎麼說,還是要謝謝你。 – Barmar

+0

但是,我查看了我們當前的廣告頁面,其腳本也很相似。他們有'' – Barmar

回答

2

如果文檔正在加載它的就緒狀態是交互式的,但body元素尚未被完全解析。您不能將子項添加到尚未加載的元素。它會導致錯誤並停止腳本。

dochead.appendChild(newscript);

快速修復是使用body.onload事件來運行你的函數。將腳本移動到頁面底部可能會有效,但在包含Internet Explorer和行爲不端的瀏覽器的世界中,我不認爲這是可靠的。

+0

腳本正在執行。我可以在其中設置一個斷點,然後停在斷點處。 – Barmar

+0

你需要看看被調用的腳本在做什麼。也許他們在做document.write的原因是因爲下一個腳本正在執行document.write。你的問題的一個非答案但替代解決方案是創建一個並將使用文檔寫入的腳本放在myad.html中。 document.write在解析過程中工作,appendChild在解析後工作,document.write在文檔加載後無法添加材質。 – Wayne

4

因爲他們使用document.write()

http://ads-by.madadsmedia.com/tags/22430/9194/async/160x600.js

if (!window.ActiveXObject){ 
    document.write("<div style=\"text-align: center; margin: 0px auto; width:160px; height:600px; position:relative;\">"); 
// etc. 

如果document.write()沒有運行在線上,積極 「開放」 的文件,它會揍那裏的東西。因此,運行腳本後加載會覆蓋您的內容。

相關問題