我想更改用于显示横幅的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>
答案 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