我正在使用Asz.net MVC 3和Razor开发一个网站。
在_Layout.cshtml
(母版页)中,我想根据浏览器是否启用javascript来设置逻辑。
制作这种逻辑的最简单方法是什么?
为简单起见,让母版页输出如下:
@if(....)//need to modify
{ <p>javascript enabled...</p>}
else {<p>javascript disabled...</p>}
答案 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();