在从事大型、高负载的项目时,我遇到了论坛和博客上已经在数十亿个主题中描述的问题,但没有解决方案对我的情况有帮助。这是故事。
我有横幅的HTML代码,我不知道代码是什么。有时它是纯 HTML,但有时它是<script>
带有 document.write的<script>
标签,其中带有 src 的标签,可以在其中双击网络。
所以我们有:脚本 > document.write > 脚本(双击)。
双击网络,您可能知道,也使用 document.write 并且大多数时候他们提供需要加载更多 js 文件的 flash 横幅。
所以毕竟我们有: script > document.write > script(doubleclick) > document.write > script > ...
当您直接将它放在 HTML 中时,这很有效。页面渲染1部分,加载banner1,继续渲染页面,加载banner2,完成页面渲染。
但是现在我需要先渲染页面,并且只有在加载横幅之后。作为横幅使用 document.write 我需要在 window.onload 事件之前加载它(注意:在 window.onload document.write 之后将重写整个文档。)
我做了什么:
在头部分我有一个横幅对象(真正的命名空间类型很大:)),具有属性范围。
当页面渲染和横幅代码相遇时,我将横幅的代码放入范围并放置<div id="bannerPlaceHolder"+id></div>
——所以这里我稍后需要放置横幅内容
页面呈现和</body>
标记之前,我将<script>banners.load()</script>
banners.load 方法对范围数组中的每个项目执行此操作:
document.write('<div id="codeHolder'+id+'">');
document.write(bannerCode);
document.write('</div>');
只有在此之后,我才有window.onload()
这样做的事件:
获取所有横幅codeHolders并逐个节点将其节点从codeHolder附加到placeHolder,因此结果我在渲染页面后加载了横幅并且横幅位于正确的位置。
除了 IE 之外,一切都很完美,它会加载以异步方式动态放入 DOM 的任何 js 脚本,因此双击脚本中的 document.write 会将节点附加到文档的末尾,而不是在我的 codeHolder 节点中。像往常一样,它只在 IE 中。
我将非常感谢任何可能知道解决方案的人。