3

I've used the <noscript> tag to hide certain elements when javascript is not enabled; however, it doesn't seem to work.

My document declaration:

<!DOCTYPE html>

At the end of my file I typed the following:

<noscript>
 <style type="text/css" scoped> #status {display:none;} </style> 
</noscript>

</body>
</html>

But the #status div is still present even after disabling JS. Am I missing something here?

4

5 回答 5

11

删除标签的scoped属性。style它使您的 CSS 严格应用于<noscript>标签。

如果存在此属性,则样式仅适用于其父元素。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style#Attributes

于 2013-06-21T15:03:04.257 回答
5

一个更简单的管理解决方案是默认隐藏元素并使用它:

<script>document.getElementById('status').style.display='block';</script>

(或等效的基于类的解决方案)

于 2013-06-21T15:03:35.287 回答
0

@dystroy 的回答是正确的做法,因为:

  • <style>不能放置元素<body>(除非它们具有scoped属性)
  • <noscript>元素不能放在头上。

但是,如果您不想延迟,可以在中使用以下内容<head>

<style id="noScriptSheet" type="text/css">
.onlyScript{ display:none;}
</style>

<script type="text/javascript">
function kill(el){
    return el.parentNode.removeChild(el);
}
kill(document.getElementById('noScriptSheet'));
</script>

并为您的元素添加一个类:

<div class="onlyScript">Hello world!</div>

演示:http: //jsfiddle.net/TQLfu/

于 2013-08-05T15:27:38.547 回答
0

尝试删除 的scopestyle如下面的代码。

       <noscript>
           <style type="text/css"> #status {display:none;} </style> 
       </noscript>
于 2013-06-21T16:26:03.183 回答
0

我添加了这个答案,因为这似乎是关于noscript标签的最流行的 SO 问题。

它似乎根本没有用"Sybu JavaScript Blocker" 触发。因此,如果您正在使用该 JavaScript 拦截器进行测试,请尝试使用另一个 JavaScript 拦截器。当我使用“Toggle Javascript”时,noscript标签触发没有问题。我还没有找到一种方法来检测正在使用“Sybu JavaScript Blocker”。


我的测试环境:

  • Sybu JavaScript 拦截器,版本 2.93
  • 切换 JavaScript,版本 1.3
  • 铬,版本 85.0.4183.83
于 2020-09-02T20:07:58.553 回答