2008-11-25 108 views
0

我想更改用於顯示來自中央源的橫幅的JavaScript的行爲。JavaScript:更改橫幅代碼

今天我包括代碼的腳本標籤內聯,就像這樣:

<script type="text/javascript" src="http://banner.com/b?id=1234"></script> 

但是,返回的是它使用document.write,用這樣的代碼:

if(condition) { 
    document.write('<a href="..."><img src="..." /></a>') 
} 

我想以某種方式覆蓋這個document.write,並可能評估返回的代碼,而是使用JavaScript框架將代碼綁定到DOM準備好的div元素。

有沒有辦法做到這一點?是這樣的嗎?:

OnDOMReady() { 
    BindBanner(1234); 
} 
BindBanner(bannerId) { 
    var divTag = document.getElementById('banner_' + bannerId); 
    divTag.innerHtml = ManipulatedReturenedCode(bannerId); 
} 

JavaScript的原型能處理類似這樣的事情嗎?

編輯:它是有點防水的跨平臺,跨瀏覽器兼容,所以我不知道,如果改變文件撰寫是確定的。

回答

1

是的,你可以覆蓋文件撰寫的元素。原型設計不是必須的,你可以直接在文檔對象本身上進行。我通常這樣做是爲了分析惡意軟件,但它肯定可以用來捕獲廣告腳本輸出,只要廣告腳本沒有執行任何特別複雜的處理,就會導致document.write與用它替換它之間的區別。

這裏是一個加載廣告的onload(略晚於domready中)包裝:

<div id="advertgoeshere"></div> 

<script type="text/javascript"> 
    function rewrite(w) { 
     document.getElementById('advertgoeshere').innerHTML+= w; 
    } 

    window.onload= function() { 
     document.write= rewrite; 
     var script= document.createElement('script'); 
     script.type= 'text/javascript'; 
     script.src= 'http://externalsite/ads.js'; 
     document.body.appendChild(script); 
    } 
</script> 
1

你試過重寫document.write嗎?我沒有時間去嘗試,但現在給這個一展身手:

var foo = document.write; 
var bannerCode = ''; 
document.write = function(str) { bannerCode += str; }; 

然後包括腳本文件,然後執行

document.write = foo; 
alert(bannerCode); 
-1

爲什麼不使用jQuery?它有一個DOM準備功能:

$.ready(function() { 

}); 

然後你就可以很容易地操作使用

$("#div_id").html 
+0

是的,但我必須得到「由HTML對象不文件撰寫,而是呈現內容爲HTML 。 – 2008-11-25 10:51:00