我正在委派一些应用程序逻辑客户端(javascipt)。只有在禁用 javascript 的情况下,我才能切换到服务器端。
例如
if(javascript.isdisabled)
{
//execute server code
}
我正在委派一些应用程序逻辑客户端(javascipt)。只有在禁用 javascript 的情况下,我才能切换到服务器端。
例如
if(javascript.isdisabled)
{
//execute server code
}
你反过来做。您编写与服务器端代码一起使用的 HTML,然后将 JavaScript 覆盖在顶部以停止触发服务器端代码的 HTTP 请求。
具体细节取决于您想要做什么,但通常会涉及调用Event.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);
另请参阅:渐进式增强和不显眼的 JavaScript
服务器代码首先执行,然后发送到客户端。并且没有很好的方法来确定服务器端是否打开了 JS。
所以纯粹:不。您根本不知道 JS 是否已启用,直到服务器已经完成了该请求的服务。
解决方案如下:
1)手动 (不推荐)
只要在用户的第一个页面视图上没有发生这种情况,您就可以在第一个页面视图上确定是否启用了 JS,然后将所有未来的请求手动告知服务器该信息。实现这一点的一种方法是让所有链接都有一个查询变量,告诉服务器执行逻辑,但在页面加载后通过 JS 删除该变量(显然只有在有 JS 时才会发生)。
所以一个链接在页面中看起来像https://blah.com/my-page?serverexecute=1
,然后一旦页面加载 JS(如果它被启用)可以删除 var 所以它只是https://blah.com/my-page
. serverexecute
然后,如果查询 var存在并设置为,服务器只会执行您的逻辑1
。
但这将是非常不标准的,坦率地说,很奇怪。更正常的方法是:
2)扭转你的想法 (推荐)
正如另一个答案中所说:渐进增强。这是常态。您提供一个页面,期望不需要其他脚本(即执行必须在服务器端完成的操作),然后仅在此基础上使用 JS 作为增强功能。
3)不迎合非JS (也推荐,反正个人)
JS 可用性是一个非常高的百分比。它被认为是一种规范,如果没有它,您会惊讶地发现有多少网站实际上无法运行。
请注意,我不是说“让它安静地中断”,而是在顶部(或任何相关的地方)显示一条消息,说明如果没有 JS,网站或网站的一部分可能无法正常运行(这可以通过noscript
标签很容易)。
一个显着的例子就是Facebook。我只是尝试在禁用 JS 的情况下访问 facebook。我没有登录任何东西,所以我进入了注册页面,在它注明的表格上方:
“您的浏览器禁用了 JavaScript。请在您的浏览器上启用 JavaScript 或升级到支持 JavaScript 的浏览器以注册 Facebook。”
他们甚至没有努力阻止表格显示……只是,本质上,告诉我“顺便说一句,它不起作用”。
除非有一些非常具体的要求意味着你绝对需要非 JS(超出一般的“让我们易于访问”的概念)noscript
让他们知道你没有迎合他们。
您可以考虑将没有 javascript 的用户重定向到一个特殊页面,其中包括您提到的服务器端逻辑,如下所示:
<head>
<noscript>
<meta http-equiv="refresh" content="0; url=http://example.com/without-js" />
</noscript>
</head>
该页面可能与具有查询字符串的页面完全相同,该字符串将告诉服务器执行您提到的逻辑。
“Detect if JavaScript is enabled in ASPX”一文解释了另一种可能的考虑方法。