19

我想知道为什么广告仍然使用 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>

代替广告?

4

10 回答 10

8

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

于 2011-05-06T02:02:52.613 回答
5

我在一家网络广告公司工作,据我所知,某些浏览器(不知道哪些浏览器)允许您将脚本标签放入页面,但不允许您自动执行其内容.

因此,要实现这一点,您需要将脚本标记分解为多个片段,以便浏览器不会将其视为脚本标记,而是将其视为任何旧的 HTML 数据。然后,随着 DOM 被串行处理,在写出脚本标签之后,它评估的下一件事是……嘿,你刚刚写出的那个脚本标签。

此时脚本标签被评估和执行。

于 2009-08-28T21:09:10.393 回答
5

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

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

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

于 2009-09-23T16:52:30.510 回答
2

我的立场是正确的,doc.write 创建的脚本阻塞了——虽然比我更糟糕,呵呵 :)——但作为一个 adblock 避免器,它真的很弱,所以我只能得出结论,它是一种 SOP 机制,用于向过度使用的脚本请求动态添加参数。

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

于 2009-02-17T11:43:24.070 回答
1

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

于 2009-02-17T12:34:36.787 回答
0

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

于 2009-02-17T12:32:35.560 回答
0

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

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

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

我想这就是原因。

于 2009-02-17T12:33:55.727 回答
0

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

于 2009-09-23T17:06:06.593 回答
0

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

于 2021-07-29T06:58:14.727 回答
-2

一种降低他们的添加被阻止的可能性的方法。

于 2014-01-15T21:16:15.157 回答