为什么要使用document.write?

时间:2009-02-17 11:03:36

标签: javascript document.write

我想知道为什么广告仍然使用document.write方法将添加内容插入页面

<script language="javascript" type="text/javascript">
    document.write("<script type='text/javascript' src='http://addomain/someadd.js'><\/sc" + "ript>");
</script>

为什么我不能放

<script type='text/javascript' src='http://addomain/someadd.js'></script>

取代广告?

10 个答案:

答案 0 :(得分:8)

传统的脚本标记会在加载和执行时阻止页面。使用document.write加载的脚本将异步工作。这就是您在广告或分析中看到这一点的原因,因为此类脚本不会直接影响页面内容。

答案 1 :(得分:5)

我与网络广告公司合作,从我所听到的,某些浏览器(不知道哪些浏览器)将允许您将脚本标记放入页面,但不允许您自动执行他们的内容。

因此,要实现此目的,您需要将脚本标记分解为多个部分,以便浏览器不会将其视为脚本标记,而是将其视为任何旧的HTML数据。然后,当连续处理DOM时,在写出脚本标记之后,它评估的下一个东西就是......嘿,你刚写完的那个脚本标记。

此时评估并执行脚本标记。

答案 2 :(得分:5)

这些document.write注入的脚本通常会附加动态字符串以消除缓存,或者将有关客户端的一些信息发送到广告服务器。我怀疑你的例子是从这样的

开始的
document.write("<script type='text/javascript' src='http://addomain/someadd.js?"+extrastuff+"'><\/sc" + "ript>");

但随着时间的推移进行了调整,或被不了解extrastuff位的人复制和修改。但是正如你所写的那样没有区别:你在问题中引用的两种方式在功能上是相同的。

答案 3 :(得分:2)

我更正了,doc.write创建的脚本阻止 - 比我更糟糕但是嘿:) - 但作为adblock避免它的真的弱,所以我只能总结它是一种SOP机制,用于动态地将params添加到过度使用的脚本请求中。

避免脚本阻止孩子时使用DOM插入技术。

答案 4 :(得分:1)

如果禁用了活动脚本,此方法可以避免加载外部脚本。

答案 5 :(得分:0)

我不确定,但他们可能会使用它,因此网站上的所有内容都会被加载并首先显示给用户,然后加载并显示广告。

答案 6 :(得分:0)

要与正则表达式匹配并删除很容易:

<script type='text/javascript' src='http://addomain/someadd.js'></script>

但另一个更复杂,可以用不同的格式编写。

我认为这就是原因。

答案 7 :(得分:0)

恕我直言,这不仅毫无意义,甚至不正确。角括号不会被转义,这会使文档在技术上无效的HTML(即使它在所有主流浏览器中都有效,因为它们试图从编码器的错误中恢复)。如果一个人用XHMTL页面作为application/xml+xhtml为他的网站提供服务,那么document.write()根本就不起作用。

答案 8 :(得分:0)

write() 方法主要用于测试:如果在一个 HTML 文档完全加载后使用它,它将删除所有现有的 HTML

答案 9 :(得分:-2)

一种方法可以减少他们的添加被阻止的方式。