2011-06-17 86 views
0

我試圖找到一種方法,通過刪除可能由廣告腳本進行的所有document.write()來(通過避免渲染阻止)來緩解我的用戶生活。解決方法document.write函數

的一部開拓創新的工作原理是這樣:

var ad_tmstp=Math.round(Math.random()*10000000000), 
sas_masterflag=1; 

function adscript(ad_pageid,ad_formatid,ad_target) 
{ 
var scripts = document.getElementsByTagName('script'); 
var currentScript = scripts[ scripts.length - 1 ]; 

if (ad_masterflag==1) {ad_masterflag=0;ad_master='M';} else {ad_master='S';}; 

document.write('<scr'+'ipt src="http://www.ads.com/call/pubj/' + ad_pageid + '/' + ad_formatid + '/' + ad_master + '/' + ad_tmstp + '/' + escape(ad_target) + '?"></scr'+'ipt>'); 
} 

這是主廣告功能,用來生成惟一的廣告網址,document.write()的它的DOM,使他響應執行。

<script type="text/javascript"> 
    ad_pageid='16645/120305'; 
    ad_formatid=7366;  
    ad_target='';   
    adscript(ad_pageid,ad_formatid,ad_target); 
</script> 

當頁面加載時,執行主腳本,造成document.write()的發生:

這個主函數調用在工地,廣告需要插入製成。動態腳本被加載,並自動執行指令,並與一個討厭的

[...]Ad innerCode creation[...] 
    if(typeof(ad_ajax)!='undefined'&&ad_ajax) 
    {ad_appendToContainer(1234,innerCode);}else{document.write(innerCode);} 

夠討厭被認真觀看結束......

所以,我到目前爲止一直在努力:

var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.defer= "true"; 
    script.src = 'http://www.ads.com/call/pubj/' + ad_pageid + '/' + ad_formatid + '/' + ad_master + '/' + ad_tmstp + '/' + escape(ad_target) + '?'; 
    currentScript.parentNode.insertBefore(script, currentScript.nextSibling); 

HTML渲染非常完美:#1創建#2。 但是,由於某種原因,包含最終document.write()應該生成廣告內容的#2,不會執行。

我可能會錯過什麼?謝謝。

+0

我很抱歉,但我不完全明白。您可以正確追加新的腳本元素(並且可以驗證其src屬性是否正確?如果將其src屬性加載到新窗口,會發生什麼情況?)。但是當附加正確的腳本時,代碼不會執行?沒有錯誤拋出? – Pantelis

+0

這正是發生的情況。新窗口中的src屬性顯示由廣告提供商生成的javavascript源代碼,用於生成並插入廣告。 – pixelboy

回答

1

如果你想消除所有document.write()電話,只是這樣做:

document.write = function() {}; 

每個document.write()調用不會做任何事情:)

(也許我只是誤會你了,因爲它是這個簡單的; ))

+0

不是這樣。我不是想覆蓋document.write(),而是用更少的塊瀏覽器渲染技術替換。 – pixelboy

+0

那麼只需將它替換爲一個你想要的功能;) – levu

+0

這就是[var] script = document.createElement('script'); [...] ... – pixelboy