10

我处于需要动态添加广告脚本标签的情况。

广告本身只是一个简单的脚本标签,其 src 属性指向广告服务器。然后运行的实际代码是一个两步的考验:

首先,有一个 document.write(),像这样:

document.write("<iframe id='lctopti2017041855' src='about:blank' style='visibility: hidden;' onload=\"this.style.visibility='visible';\" style='border: 0px; overflow-x: hidden;overflow-y: hidden; width: 100px; height: 400px;' width='100' height='400' scrolling='no' frameborder='0' allowtransparency='true'></iframe>");

接下来,有一个:

document.getElementById('lctopti2017041855').src = 'http://www.reallylongurl.com/blah.php?whatever=whatever'

现在,似乎在页面加载时运行 document.write() 很好;但我发现,如果我采用相同的初始标记并将其弹出到 $('#somediv').prepend() 中,例如,它将覆盖整个页面。

有什么办法可以解决这个问题吗?iframe id 和后续的广告 url 始终是动态的,并且在初始脚本标记从广告服务器请求 javascript 时生成。如果初始脚本标签包含我需要的所有信息,我可以简单地用 $('#anywhere').prepend() 或其他东西切换 document.write。我该如何解决这个问题,而不是从字面上刮掉初始脚本加载的结果然后处理结果?

有没有办法阻止 document.write() 覆盖页面,而只写它被调用的地方?

4

2 回答 2

14

这是我之前成功完成的事情

var oldWrite = document.write;
var wHtml="";
document.write=function(str) {
  wHtml+=str;
}
// load adcode
$('#somediv').prepend(wHtml);
// optionally reset
document.write = oldWrite;

如果广告代码也使用 document.write 加载脚本,这可能会失败。在这种情况下,请使用 iFrame,因为它将包含他们可以做的所有废话

于 2012-12-08T07:03:02.363 回答
0

如果文档被加载,document.write将刷新整个页面。所以它不应该放在一个将在文档加载后调用的函数中。

如果您想要更多操作,我认为您可以更改为其他方法。

http://javascript.info/tutorial/document-write一些关于document.write这里的信息。希望它会有所帮助。

于 2012-12-08T07:23:43.493 回答