0

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

例如

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

3 回答 3

3

你反过来做。您编写与服务器端代码一起使用的 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

于 2013-06-03T14:34:03.010 回答
0

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

于 2018-04-15T18:09:23.437 回答
-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”一文解释了另一种可能的考虑方法。

于 2013-06-03T14:38:41.387 回答