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

标签 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 和后续广告 url 始终是动态的,并在初始脚本标记从广告服务器请求 javascript 时生成。如果初始脚本标签包含我需要的所有信息,我可以简单地用 $('#anywhere').prepend() 或其他方式切换 document.write。我该如何解决这个问题,而不是从字面上抓取初始脚本加载的结果然后处理结果?

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

最佳答案

这是我以前成功做过的事

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,因为它将包含他们可以做的所有废话

关于javascript - 如何处理页面加载后添加的脚本中的 document.write?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775185/

相关文章:

javascript - 在露天 freemarkuer 模板中列出 javascript 数组

javascript - 如何在浏览器中检索准确的 HTML

javascript - jQuery:检测 Flexbox 内的位置

jQuery - 从多个下拉列表中淡出 DIV

javascript - 我如何使用 jQuery 知道 DOM 元素当前是否在屏幕上

xml - 解析具有相同名称的嵌套 XML 标记

javascript - $.when($ ("").function() == true).then() 未按预期工作

javascript - 元素从 div 中出来

javascript - button.click() 在 IE11 下不起作用

jquery - 如何使用 jQuery 将页面中的值加一?