【问题标题】:Use server side code if javsascript is disabled如果禁用了 javascript,则使用服务器端代码
【发布时间】:2013-05-29 17:58:02
【问题描述】:

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

例如

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

【问题讨论】:

  • 这是什么逻辑?如果我们谈论的是验证,推荐的方法是在客户端和服务器端进行验证
  • 哈哈这个测试看起来像是用 Javascript 执行的。讽刺!

标签: javascript asp.net cross-browser


【解决方案1】:

你反其道而行之。您编写与服务器端代码一起使用的 HTML,然后在顶部添加 JavaScript 以停止触发服务器端代码的 HTTP 请求。

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

例如,给定一个表格:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      服务器代码首先执行,然后发送到客户端。并且没有很好的方法来判断服务器端是否开启了JS。

      那么纯粹:不。在服务器已经完成服务请求之前,您根本不知道 JS 是否已启用。

      解决方法如下:


      1) 手动操作 (不推荐)

      只要在用户的第一个页面视图上没有发生这种情况,您可以在第一个页面视图上确定是否启用了 JS,然后手动将所有未来请求告诉服务器该信息。实现这一点的一种方法是让所有链接都有一个查询变量,告诉服务器执行逻辑,但在页面加载后通过 JS 删除该变量(显然只有在有 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 提供,让他们知道您没有迎合他们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多