【发布时间】:2014-02-04 04:23:07
【问题描述】:
我需要重写 document.write 以呈现从谷歌双击返回的包含在该函数中的广告。由于标准 document.write 完全替换了页面内容,因此我将其覆盖以将广告内容附加到现有元素。但是,我想确保此覆盖仅在广告呈现期间发生,并且页面上可能存在的任何其他 document.write 不受影响。这可以通过闭包来确定或完成吗?我不是很熟悉这是怎么做的。
到目前为止我有:
(function(){
function RenderAd(adURL,Element)
{
document.write = function(adContent) {
Element.append(adContent);
}
$.getScript(adURL);
}
RenderAd('http://ad.doubleclick.net/N4890/adj/za.za.home/main;pos=300top;tile=2;sid=Amazon;sz=300x250;ord=12247707435800953?',$('#HeaderDiv'));
}(document.write));
但是当我之后调用document.write('test');时,它仍在使用我的document.write版本。
【问题讨论】:
-
您正在使用自定义函数覆盖
document.write的值。但是您不会在任何地方设置原始值。它应该自动恢复吗? -
@Jon 这是范围和闭包的整个概念。它只是不适用于作为文档对象一部分的全局函数。
-
如果代码使用参数而不是直接访问
window.document来修改属性。
标签: javascript jquery closures document.write