为什么大多数营销标签(Omniture,XE等)都是用document.write()编写的?

时间:2010-04-05 21:37:33

标签: javascript html

  

可能重复:
  Why use document.write?

考虑到document.write()的负面影响,为什么大多数跟踪/营销标签都是使用document.write()编写的?

我已经考虑了很多,而且我提出的唯一值得尊敬的想法是,通过编写客户端,我们保证浏览器不会尝试缓存资源。是吗?还有其他想法吗?

4 个答案:

答案 0 :(得分:2)

这绝对是丑陋的,但它是关于最具战斗力,笨拙,愚蠢的方法。 “将此内容写到此处的页面上”的范例几乎没有留下任何惊喜的空间,并且实现至少可以在v3浏览器中可靠地运行,可能更早。

[edit]“v3”浏览器,不像在Firefox 3中那样,但在Netscape 3中也是如此。如果Netscape今天仍然存在,我想它现在已经是版本11了。

答案 1 :(得分:2)

使用document.write插入页面的脚本不会阻止其他脚本执行,因此当广告的外部资源插入页面时,页面加载速度不会受到影响。更多信息:http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/

答案 2 :(得分:1)

我没有看到这种方法在浏览器缓存方面有什么保证......?例如,如果它请求图像,浏览器可能仍然选择从缓存中提供该图像,无论请求是来自原始源中的IMG标记,还是document.write - 写入的IMG标记。

我最好的猜测是他们希望脚本是自包含且易于部署的。很多时候(并且由于显而易见的原因)引用的脚本(例如,图像指向的URL)是不同的,这取决于当前页面是否通过安全HTTPS连接加载。如果当前页面是https页面,请加载https://omniture.com/xxx,否则加载http://omniture.com/yyy。这在javascript中很容易实现,但你不能用HTML硬编码。鉴于任何服务器端语言,它同样容易实现,这将是更好的,但我认为他们不想说“继续以你喜欢的任何方式实现这个功能”,而是,他们想要提供尽可能有效的解决方案,无论环境如何,以及尽可能少的依赖关系。

答案 3 :(得分:0)

它与缓存无关。它与脚本提供程序有关,不知道脚本放在文档的哪个位置。脚本提供程序不能只执行document.getElementsByTagName("script")并在带有匹配URI的第一个脚本标记之后插入HTML,因为它不知道URI是否包含哈希值(http://example.com/blah.js#foo)或直接托管在减少DNS请求的第一方服务器。有一种解决方法,但它涉及使用在捕获的错误中公开的脚本文件名中的黑暗魔法。可以在my implementation of document.write for asynchronous scripts中找到此魔法的实现。 (<script async>