为什么要用JavaScript <noscript>
写出document.write()
代码,有什么实际可靠的理由吗?我们的广告部门多年来一直这样做,在我指出之后仍然这样做。我99%肯定这是因为一个古老的广告模板是由一个不知道自己在做什么的人编写的,没有人想过改变它,因为“为什么要解决没有破坏的东西?”或者也许有人正在阅读他们的“最佳实践”错误(“总是包含已禁用JS的浏览器的替代方案”)。或许我不知道这是一个非常好的理由。
我能想到的唯一可想到的事情是你可以使用它来修改DOM,而不会在页面上看到它,也许可以像使用模板一样使用这些内容供以后使用,但这看起来相当牵强。
(编辑)
此案例中的标记包含标准<a href="/path/to/advertiser"><img src="/path/to/image" /></a>
。因为这是原始的非动态广告代码看起来像,这让我觉得这只是复制粘贴垃圾。
我应该说的另一件事是,我不能100%确定这是一个过分的原因是因为最近将html模板放在<script type="text/x-my-custom-template">...</script>
中的模式。我怀疑有人会在我们自己的基础上提出这个问题,但这可能是一个非常聪明的人的标准广告实践。
答案 0 :(得分:5)
有没有任何实际的理由说明为什么要用
写出<noscript>
document.write()
代码?
不。两者(<script>
和<noscript>
)是互斥的。这就像写一段这样的代码:
if (true && false) {
// do something important
}
如果启用了JavaScript,则浏览器会忽略<noscript>
标记。另一方面,如果禁用JavaScript,则永远不会写入<noscript>
标记,因为忽略了<script>
标记。
答案 1 :(得分:1)
这用于机器人检测/指纹识别。
例如,如果我使用
document.write('<script src='...'>...</script><noscript><img>....</noscript>');
Chrome 55+阻止与document.write()
编写的原始脚本不同。这意味着上述<noscript>
实际上将在某些/更新版本的Chrome上运行,尽管来自&#34;脚本&#34;。
假设的目的是,如果机器人假装是(例如通过欺骗其用户代理)特定版本的chrome,并且脚本未被阻止,则会指出它不是真正< / em> chrome(bot)。