如果禁用了javascript,请使用服务器端代码

时间:2013-06-03 14:31:29

标签: javascript asp.net cross-browser

我正在委派一些应用程序逻辑客户端(javascript)。 只有在禁用javascript的情况下,我才能切换到服务器端。

例如

if(javascript.isdisabled)
{
    //execute server code
}

3 个答案:

答案 0 :(得分:3)

你反过来做。您编写的HTML与服务器端代码一起使用,然后将JavaScript层叠在顶部,以阻止触发服务器端代码的HTTP请求。

具体细节取决于您想要做什么,但通常会涉及调用绑定Event.preventDefault()an event listener方法。

例如,给出一个表格:

function calc(evt) {
    var form = this;
    alert(+this.elements.first.value + +this.elements.second.value);
    evt.preventDefault()
}

var form = document.querySelector('form');
form.addEventListener('submit', calc);

另请参阅:Progressive EnhancementUnobtrusive JavaScript

答案 1 :(得分:0)

首先执行服务器代码,然后在客户端发送然后。并且没有好的方法来确定服务器端是否打开了JS。

如此纯粹:没有。您只是不知道JS是否已启用,直到服务器已完成为该请求提供服务为止。

解决方案如下:

1)手动执行 (不推荐)

只要在用户的第一页视图中没有发生这种情况,您就可以在第一页上查看是否启用了JS,然后手动告诉所有将来向服务器发出该信息的请求。实现这一目标的一种方法是让所有链接都有一个查询var告诉服务器执行逻辑,但在页面加载后通过JS删除该var(显然只有在JS时才会发生)。

因此页面中的链接看起来像https://blah.com/my-page?serverexecute=1,然后一旦页面加载JS(如果已启用)就可以删除var,因此它只是https://blah.com/my-page。然后,如果查询var serverexecute存在并设置为1,服务器将仅执行您的逻辑。

但这非常不标准,坦率地说,很奇怪。更常见的方法是:

2)扭转您的想法 (推荐)

如另一个答案中所述:渐进增强。这是常态。您需要提供一个页面,期望不需要其他脚本(即执行必须在服务器端完成的操作),然后仅使用JS作为增强功能。

3)不要迎合非JS (也建议个人使用)

JS可用性是一个非常高的百分比。它被认为是一种规范,如果没有它,有多少网站真的无法工作,你会感到惊讶。

请注意,我不是说"只是让它静静地打破" ,而是在顶部(或相关的任何地方)显示该网站的消息或者没有JS,网站的一部分可能无法正常运行(这可以很容易地通过noscript标签完成)。

一个值得注意的例子就是 Facebook 。我刚试过去禁用JS的facebook。我没有登录任何东西,所以我进入了注册页面,并在表格上方注明:

"您的浏览器禁用了JavaScript。 请在您的浏览器上启用JavaScript或升级到支持JavaScript的浏览器以注册Facebook。"

他们甚至没有努力阻止表格显示......只是,实质上告诉我,顺便说一句,它不会工作"。

除非有一些非常具体的要求意味着你绝对需要非JS(超出正常的一般"让我们可以访问"概念)我个人认为目前绝对没有有理由花费任何努力迎合非JS用户,超出noscript的礼貌,让他们知道你不适应他们。

答案 2 :(得分:-1)

您可以考虑将没有javascript的用户重定向到特殊页面,其中包括您提到的服务器端逻辑,如下所示:

<head>
  <noscript>
    <meta http-equiv="refresh" content="0; url=http://example.com/without-js" />
  </noscript>
</head>

该页面可能与查询字符串完全相同,该字符串将告诉服务器执行您提到的逻辑。

另一种可能的考虑方法在"Detect if JavaScript is enabled in ASPX"文章中进行了解释。