我正在委派一些应用程序逻辑客户端(javascript)。 只有在禁用javascript的情况下,我才能切换到服务器端。
例如
if(javascript.isdisabled)
{
//execute server code
}
答案 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);
答案 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"文章中进行了解释。