如何检测浏览器是否启用了javascript s.t.母版页可以做出正确的回应吗?

时间:2011-03-04 01:43:38

标签: javascript asp.net-mvc asp.net-mvc-3

我正在使用Asz.net MVC 3和Razor开发一个网站。

_Layout.cshtml(母版页)中,我想根据浏览器是否启用javascript来设置逻辑。

制作这种逻辑的最简单方法是什么?

为简单起见,让母版页输出如下:

@if(....)//need to modify
{ <p>javascript enabled...</p>}
else {<p>javascript disabled...</p>}

4 个答案:

答案 0 :(得分:7)

如果您想阻止访问您的应用程序,可以使用类似这样的内容

<noscript>
    <meta http-equiv="refresh" content="0;url=../Controller/Error" />
</noscript>

答案 1 :(得分:6)

无法在服务器上找到它,因此在加载第一页之前无法找到答案。您可以做的最好的事情是将一些Javascript放入设置cookie的页面或向服务器发布AJAX响应,告诉它Javascript处于活动状态,因此您可以在后续页面请求中执行某些操作。即使除了第一页加载的明显问题之外,这也是一个糟糕的策略,因为用户可能会在此期间关闭Javascript,而您的服务器仍然认为它是活动的。

Graceful degradation / progressive enhancement是此处的关键字。默认情况下,让您的页面假定没有Javascript处于活动状态并相应地执行操作,即在任何一种情况下都提供纯HTML。如果Javascript处于活动状态,请包含将“升级”网站功能的Javascript。让客户弄清楚Javascript是否正常工作,并为其提供工作方式。

答案 2 :(得分:1)

我担心没有好的解决方案。几乎所有解决方案都在某种程度上涉及运行脚本来进行检查,并且感觉不对(至少对我而言)。我建议的最佳解决方案是使用<noscript />标记并重定向到不依赖于javascript的其他页面。

答案 3 :(得分:-2)

这是一招......

假设用户已阻止(关闭)JavaScript。我们将此代码放入index.aspx:

<script>
document.location.href = "index.aspx?js=1";
</script>

如果你得到js = 1,你知道用户已经启用了JS。

因此,您可以根据用户具有/不具有JS来生成代码。

另一种方法是生成一些特殊类的内容,例如: <div class="noscript">,然后运行脚本(jQuery):

$(".noscript").hide();