noscript 是不是得到启用 javascript 的浏览器的确认?

Posted

技术标签:

【中文标题】noscript 是不是得到启用 javascript 的浏览器的确认?【英文标题】:Does noscript get acknowledged by javascript enabled browsers?noscript 是否得到启用 javascript 的浏览器的确认? 【发布时间】:2010-09-21 07:25:39 【问题描述】:

我正在考虑通过将广告代码移至外部 jQuery 脚本来收紧我们的广告代码,但我显然仍需要一些 html 来定位广告。所以我想知道我是否可以定位一个 noscript 元素(或在一个 noscript 元素内),因为无论如何我都必须将它留在页面上,或者我是否需要一些其他元素供 javascript 定位?

<noscript>
  <div class="ad"><a href="foo"><img src="bar"  /></a></div>
</noscript>

我的意图是更改或删除 noscript 元素。

【问题讨论】:

【参考方案1】:

&lt;noscript&gt; 内容不仅在 JS 处于活动状态时不显示,而且显然也不在 DOM 中。我尝试访问 &lt;noscript&gt; 区域内的内容(希望您可以使用 jQuery clone() 将其插入到其他位置)但什么也没得到。

【讨论】:

谢谢_Laser,这就是我正在寻找的答案。 它在 DOM 中。使用普通的 nextSibling 调用,您将获得 noscript 部分。我的猜测是,像评论标签一样,jQuery 只是忽略了 noscript 标签。 因此,您可以使用一些不错的非 jquery 递归调用在技术上遍历页面加载时的 DOM,并找到无脚本标签并提取其内容,然后使用 jQuery 执行您想要的操作。我在 Javascript 中使用基于注释的注释做了非常相似的事情。 @kouPhax:你是说 _Lasar 实际上是不正确的并且 noscript 是有效的并且可用于 DOM? 我只错了一半 :) 我只在 Safari 中进行了测试,这显然会从 DOM 中删除 noscript 标签内的所有内容(标签本身似乎仍然存在)。 jQuery 一直忽略 noscript 内容,说不出原因。【参考方案2】:

您可以定位 noscript 元素。

    <noscript>asdfasFSD</noscript>

    <script>
        alert(document.getElementsByTagName("noscript")[0].innerHTML);
    </script>

这适用于 FF3、IE6 和 Google Chrome。它会提醒我 asdfasFSD。

【讨论】:

对,但我愿意打赌(诚然没有任何测试),如果您使用 nextSibling 遍历整个 DOM,您将能够找到 noscript 标签。 它在 IE7 上不起作用。 &lt;noscript&gt; 元素本身是可访问的,但我无法获取它的内容(.innerHTML 和 .textContent 都没有,也没有 .childNodes)【参考方案3】:

为什么需要 noscript 元素?如果您只是在 javascript 运行时将其删除或替换为不同的元素,那么 div 的行为就像 noscript 元素一样。

【讨论】:

如果不支持 JS,将显示 noscript,我必须考虑这一点。所以,noscript 将永远存在。但是,如果支持 JS,我可以使用内容。 没错。所以只要去掉 no-script 标签,如果有 Javascript 就用它做点什么,而不是反过来。 现在说得通了,但这里的问题是,如果 JavaScript 可用,我们实际上会提供不同的广告信息,并且将 noscript 中的内容呈现给浏览器将导致拉出两个广告而不是一个。我们会因为将广告展示次数翻倍而受到指责。【参考方案4】:

大多数浏览器不会让你定位 noscript 元素,即使你(错误地)给它一个 id。您可以尝试http://dev.opera.com/articles/view/replacing-noscript-with-accessible-un/ 之类的方法 - 它是实现相同目的的标准兼容方法,但没有 noscript 标记。

【讨论】:

【参考方案5】:

如果浏览器启用了 javascript,则不会显示 no-script 元素内的内容。

您需要将它放在 JavaScript 定位之外,并使用 NoScript 部分来实现其目的,即未启用 JavaScript 的用户。

【讨论】:

我理解 noscript 的原因,我不是在寻找它是否显示或为什么显示,而是它是否可用于 DOM。当使用 Web Developer 查看我的渲染源时,我看到元素仍然存在,因此我的问题是它是否可用于目标。 我了解,但是将其用作内容的来源,或使用 JS 更新内容的目标,不是最佳做法,甚至不是建议的做法。【参考方案6】:

如果没有别的办法,您总是可以使用 JS 来使用 CSS 隐藏该广告。

【讨论】:

以上是关于noscript 是不是得到启用 javascript 的浏览器的确认?的主要内容,如果未能解决你的问题,请参考以下文章

Edge 浏览器是不是有与 NoScript 功能类似的插件?

我们是不是需要为所有不同的第三方脚本添加 noscript 标签

如果浏览器中未启用javascript,则显示消息

Javascript中的noscript

火狐4.0安装了noscript和ABP后在百度知道点击彩蛋无反应,期待帮助

.html() 是不是有香草 Javascript 替代品?