接了一家的广告代码 加进模板后整页只剩广告 正文和样式全没了 控制台一条 Violation Avoid using document.write() for users on slow connections 主文档被重写了一次。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

document.addEventListener('DOMContentLoaded', () => {
  console.log(document.body.children.length);
});

document.write 在文档解析结束之后调用 会先清空整个文档再写入 广告代码被包在 defer 或者 load 回调里执行 正好踩在这个时机上 这类事故在模板里出现过不止一次。这一点先确认清楚,后面就不用反复试。

碰到「document.write 清空页面」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,先确认广告代码里有没有 document write 解析完成后再调就是清空页面;跟对方要异步版本的代码 通常都提供 ins 标签加 push 的写法;实在只能用就放进同域 iframe 里 让它只冲掉自己那一小块。

改完照着核一遍,插入广告后正文和样式都还在 广告只出现在指定容器 主文档没有被重写。

作者 9823189