3

你有什么实际的理由<noscript>用 JavaScript 写一个标签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>。我怀疑我们这边的某个人会自己想出这个,但这可能是一个非常聪明的人的标准广告实践。

4

3 回答 3

7

有什么实际的理由让你<noscript>用 JavaScript 写一个标签document.write()

没有。两者 (<script><noscript>) 是互斥的。这就像写一段这样的代码:

if (true && false) {
    // do something important
}

如果启用了 JavaScript,浏览器将忽略该<noscript>标记。另一方面,如果 JavaScript 被禁用,<noscript>则永远不会写入标签,因为<script>标签会被忽略。

于 2012-05-12T01:57:31.923 回答
1

这用于机器人检测/指纹识别。

例如,如果我使用

document.write('<script src='...'>...</script><noscript><img>....</noscript>');

Chrome 55+ 阻止从document.write(). <noscript>这意味着尽管来自“脚本”,但 上述内容实际上将在某些/较新版本的 chrome 上运行。

假设的目的是,如果机器人假装是(通过欺骗其用户代理)特定版本的 chrome,并且脚本没有被阻止,它将指出它不是真正的chrome(机器人)。

于 2017-07-21T21:35:38.507 回答
0

您可以在特定的 html 标记中添加子节点。

var noscript = document.createElement('noscript')
var iframe = document.createElement('iframe')
iframe.setAttribute('src', "<your source>")
iframe.setAttribute("height", "0")
iframe.setAttribute("width", "0")
iframe.setAttribute("style", "display:none;visibility:hidden")
noscript.appendChild(iframe)
document.body.appendChild(noscript)
于 2021-12-15T08:04:20.453 回答