如何检测用户是否已禁用JavaScript?

3

我和朋友谈论了那些在浏览器中没有启用JavaScript的用户,以及如何展示给他们一个“无JavaScript”版本的网站。

这是否可能?如何实现呢?

你有什么想法吗?


2
@BalusC:也许你是对的,但是你是怎么得出标题中仅出现一次的JavaScript比正文中两次出现的Java更重要的结论的呢? - Daniel Vassallo
1
我认为@BalusC正在开发这个徽章 :) http://meta.stackexchange.com/questions/30965/can-we-have-a-mind-reading-badge - Daniel Vassallo
7个回答

16
不要尝试构建JS和非JS版本的站点。建立一个非JS版本,然后使用JS增强它。这样可以更轻松地重用代码,允许您为整个堆栈使用对象/特性检测,并且使没有JavaScript的用户在开发人员更新站点的一个分支而不是另一个分支时不太可能被落下。

1
不是有什么不敬,但你所谈论的“增强功能”将会是令人失望的低级别。要么如此,要么你只是从一开始就瞄准了低端。否则,你最终仍然会得到本质上是两个不同版本的网站,两者都必须得到维护。 - Robusto
3
关于Robusto,实际上并不是网站的两个版本。这是一个一直在运作的网站,但对于使用Javascript的用户来说有额外的功能。Dorward先生的建议很中肯,并符合多年来积累的用户体验数据。这使得该网站更加容错性强,并且在我的经验中更易于维护。 - Brock Adams

7
如果您是指JavaScript,请查找HTML标记<noscript>

4
如果您在谈论JavaScript,并且希望为那些没有JavaScript的人提供另一种版本的网站,只需给他们没有JavaScript的网站,并将以下内容放在页面顶部:
<script type="text/javascript">
     location.replace('http:javascript-version-of-your-site');
</script>

1
反向更好 - 通过将更常见的情况设置为默认值,可以避免重定向。请参阅我的下面的评论。 - x0n
元刷新选项也不错,但可能不太友好于搜索引擎,并且可能会导致浏览器的“后退”按钮出现问题,有些浏览器即使禁用JS仍会忽略noscript元素。 - Gabe

1

像这样:

<html>
<head>
<noscript>
<meta http-equiv="refresh" content="0;url=http://foo/noscript.htm" />
</noscript>
</head>
<body>
...

元刷新(声明式重定向)仅在浏览器上没有启用脚本时才会执行。当然,noscript标签只能被具有JavaScript引擎的浏览器理解。如果您想捕获根本没有JavaScript的浏览器(我不知道有多少),那么这种方法将无法奏效。


дёҖдәӣеёҰжңүJSеј•ж“Һзҡ„жөҸи§ҲеҷЁе°ҶеҝҪз•Ҙnoscriptж ҮзӯҫпјҢдҪҶжҳҜеҪ“е®ғиў«зҰҒз”Ёж—¶дёҚдјҡжү§иЎҢд»»дҪ•JSпјҢеҜјиҮҙйЎөйқўж— жі•жӯЈеёёе·ҘдҪңгҖӮ - Gabe
1
noscript元素不允许作为head元素的子元素,而meta元素也不能作为noscript元素的子元素。http://www.w3.org/TR/html4/interact/scripts.html#h-18.3.1 - Quentin
哦,w3的建议。建议而非规则。如果HTML被严格执行,全球网络将会小得多。 - x0n

1

我使用JavaScript和CSS的组合

<html>
<style type="text/css">
    .js-on
    {
        display: none;
    }
    .js-off
    {
        background: red;
        color: White;
    }
 </style>
 <div id='jsdetect' class='js-off'><b>Javascript is OFF</b></div>
 <script type="text/javascript">
    document.getElementById('jsdetect').className = 'js-on';
 </script>

</html>

如果你的唯一目的是告诉用户Javascript不可用,网站将无法正常工作,那么这很有用。


0

你可以使用 <noscript> 标签来放置一些代码,以记录/跟踪/警报那些禁用 JavaScript 的用户。

<noscript>
   // Do Something
</noscript>

0

除了显而易见的noscript标签之外,您可以选择另一种选项,即使用JavaScript放置一个cookie,然后测试该cookie并适当地提供内容。 JavaScript版本与非重定向或跨度

我只是想把它扔进去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接