JavaScript:横幅代码更改

时间:2008-11-25 10:14:12

标签: javascript html

我想更改用于显示横幅的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的原型设计可以处理这样的事情吗?

编辑:它必须有点防水,跨平台,跨浏览器兼容,所以我不知道更改 document.write 是否正常。< / p>

3 个答案:

答案 0 :(得分:1)

您是否尝试过覆盖document.write?我现在没有时间尝试,但请试一试:

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

然后包含脚本文件,然后执行

document.write = foo;
alert(bannerCode);

答案 1 :(得分:1)

是的,您可以覆盖document.write。原型设计不是必需的,您可以直接在文档对象本身上进行。我通常这样做是为了分析恶意软件,但它肯定可以用来捕获广告脚本输出,只要广告脚本没有做任何特别复杂的处理,这会导致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>

答案 2 :(得分:-1)

为什么不使用jQuery?它有一个DOM就绪函数:

$.ready(function() {

});

然后您可以使用

轻松操作元素
$("#div_id").html