如何在页面加载后添加的脚本中处理document.write?

时间:2012-12-08 06:37:14

标签: javascript html dom

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

广告本身只是一个简单的脚本代码,其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和后续广告网址始终是动态的,并在初始脚本标记从广告服务器请求javascript时生成。如果初始脚本标记包含我需要的所有信息,我可以简单地用$('#anywhere')。prepend()或其他东西切换document.write。我怎样才能解决这个问题,除了从字面上抓取初始脚本加载的结果然后处理结果?

是否有办法阻止document.write()覆盖页面,而只是写入调用的位置?

2 个答案:

答案 0 :(得分:13)

这是我在

之前成功完成的事情
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,因为它将包含他们可以做的所有废话

答案 1 :(得分:0)

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

如果你想要更多动作,我想你可以改用其他方法。

http://javascript.info/tutorial/document-write此处显示了有关document.write的一些信息。希望它能有所帮助。