Javascript 为什么要使用document.write?

Javascript 为什么要使用document.write?,javascript,document.write,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> 文件。填写(“”); 为什么我不能

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


代替ad?

我认为正确,doc.write创建的脚本是阻塞的-比我认为的更糟-但是作为一个adblock避免器,它确实很弱,所以我只能得出结论,这是一种SOP机制,用于向过度使用的脚本请求动态添加参数


避免脚本阻塞儿童时使用DOM插入技术。

我不确定,但他们可能会使用DOM插入技术,以便先加载网站上的所有内容并向用户显示,然后加载并显示广告。

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

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

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


我认为这就是原因。

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

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

因此,要实现这一点,您需要将脚本标记分解为多个部分,以便浏览器不会将其视为脚本标记,而是将其视为任何旧的HTML数据。然后,当DOM被串行处理时,在写出脚本标记后,它计算的下一个结果是。。。嘿,你刚才写的脚本标签


此时,脚本标记将被评估和执行。

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

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


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

我想,这不仅毫无意义,甚至是不正确的。尖括号不会被转义,这将使文档在技术上无效的HTML(即使它在所有主要浏览器中都能工作,因为它们试图从编码人员的错误中恢复)。如果一个人用xhtml页面作为
application/xml+xhtml
,那么
document.write()
根本不起作用。

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

这是一种减少他们的添加被阻止的可能性的方法

这是我的想法,但考虑到这会使我所有测试中的页面呈现速度变慢,我真不敢相信这是真的。内联脚本,甚至手动将其附加到DOM中,都会生成更快的渲染(事实上,document.write与其他脚本相比,会生成一个signigant块)。@annakata:您是否有一个链接详细解释了这一点?我对“规避阻塞”也有疑问。不,这是我专业参与的事情——我见过竞争对手调用doc.write技术,并假设它是阻塞解决方案的一部分(因为其余代码符合通用模式)。事实证明doc.write真的很糟糕,我给了竞争对手太多的荣誉:)不-起初我认为,但是doc.write创建的脚本是阻塞的如果脚本被禁用,无论如何都不会加载脚本-至少在FF中,我还没有在其他地方测试过,但我相信这是真的,至少一些较旧的浏览器做到了这一点。那么你的意思是,如果禁用活动脚本,它会阻止文件加载?好像它将被加载(但不执行)到脚本标记的什么位置?我不太清楚。但我认为有些浏览器确实可以加载外部脚本文件,尽管禁用了活动脚本。因此,使用前一个变体将阻止这些浏览器加载外部脚本文件。这似乎使问题变得复杂,仅仅是为了防止某些(可能)传统浏览器下载单个广告。我无法想象这是唯一的原因!我不太明白这个。我可以;我们公司从一家广告公司收到了类似的代码。我同意Paul的观点-这基本上是一种减少脚本被过滤/忽略的可能性的方法。我还应该补充一点,我们收到的代码被连接进一步混淆了。。。""... 很明显,他们就是这么做的。这里有一个有趣的重复循环。尖括号不需要在
块中转义–事实上,这样做会使它们非常失败。一个考虑因素是
,通常以字符串形式转义为
,等等。。还有,从什么时候开始,
document.write
在XHTML中工作?@minitech:这两点你都错了。在XHTML
中,脚本
元素与DTD中的
相同-请看您自己,它是。不过,人们通常使用
而不是手动实体编码。而
document.write
对于
XMLDocument
s是不存在的,因此除非您错误地将XHTML作为
text/html
提供,否则它会指示浏览器将is视为html。不过,浏览器是否曾以不同的方式处理过XHTML文档?(即作为XML文档?)这对我来说是新闻。无论如何,“尖括号不需要在
块中转义”是正确的。我不是在说XHTML。(你的答案中似乎也没有提到。)是的,如果提供了正确的MIME类型,则使用XML解析文档。你有没有在Firefox中看到过黄色的“XML解析错误”页面?就我个人而言,当XHTML是一种时髦的语言,每个人都试图使用它时,我已经见过十几次了。但这是真的吗?因为执行最终会产生结果