服务器代码首先执行,然后发送到客户端。并且没有很好的方法来判断服务器端是否开启了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 提供,让他们知道您没有迎合他们。