[英]Use server side code if javsascript is disabled

i'm delegating some application logic client side (javascipt). How can i switch to server side only if javascript is disabled.




    //execute server code

3 个解决方案



You do it the other way around. You write HTML that works with server side code, then layer JavaScript over the top that stops the HTTP request that would trigger the server side code.


The specifics depend on exactly what you want to do, but will usually involve calling the Event.preventDefault() method having bound an event listener.


For example, given a form:


function calc(evt) {
    var form = this;
    alert(+this.elements.first.value + +this.elements.second.value);

var form = document.querySelector('form');
form.addEventListener('submit', calc);

See also: Progressive Enhancement and Unobtrusive JavaScript




Server code executes first, then is sent client side. And there's no good way to determine server side whether JS is turned on.


So purely: no. You simply don't know if JS is enabled until the point where the server already done serving that request.


Solutions are as follows:


1) Do it manually (not recommended)


As long as this is not happening on the user's first page view, you could determine on the first page view whether or not JS is enabled, and then tell all future requests to the server that information manually. One way to accomplish that would be to have all links have a query var telling the server to execute logic, but after the page loads remove that var via JS (which obviously will only happen if there is JS).


So a link would look like https://blah.com/my-page?serverexecute=1 in the page, then once the page loads JS (if it's enabled) can remove the var so it's just https://blah.com/my-page. Then the server would only executed your logic if the query var serverexecute is present and set to 1.

所以一个链接看起来像页面中的https://blah.com/my-page?serverexecute=1,然后一旦页面加载JS(如果它已启用)可以删除var所以它只是https://blah.com /我的页面。然后,如果查询var serverexecute存在并且设置为1,则服务器将仅执行您的逻辑。

But this would be very non-standard and, frankly, weird. The more normal way to do this is:


2) Reverse your thinking (recommended)


As said in another answer: progressive enhancement. This is the norm. You serve a page with the expectation that no other scripting be needed (i.e. do what has to be done server side) and then use JS as enhancement on top of that only.


3) Don't cater to non-JS (also recommended, personally anyway)


JS availability is an insanely high percentage. It is considered a norm, and you'd be surprised how many sites don't actually work without it.


Note that I'm not saying "just let it break silently", but rather show a message at the top (or wherever is relevant) saying that the site or part of the site may not function correctly without JS (this can be done via noscript tags quite easily).


A notable example of this is none other than Facebook. I just tried going to facebook with JS disabled. I wasn't logged in to anything, so I got to the signup page, and above the form it noted:


"JavaScript is disabled on your browser. Please enable JavaScript on your browser or upgrade to a JavaScript-capable browser to register for Facebook."


They didn't even make the effort to stop the form from showing...just, in essence, told me "by the way, it won't work".


Unless there's some very specific requirement that means you absolutely need non-JS (beyond the normal general "let's be accessible" concept) I personally believe there is currently absolutely no reason to spend any effort catering to non-JS users beyond the courtesy of a noscript letting them know that you're not catering to them.

除非有一些非常具体的要求意味着你绝对需要非JS(超出正常的一般“让我们可以访问”的概念),我个人认为,除了礼貌之外,目前绝对没有理由花费任何努力来迎合非JS用户。 noscript让他们知道你不会迎合他们。



You could think of redirecting users without javascript to a special page, that includes server-side logic you've mentioned, like so:


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

The page may be exactly same page featuring query string that will tell server to perform the logic you've mentioned.


Another possible approach to consider is explained in "Detect if JavaScript is enabled in ASPX" article.




粤ICP备14056181号  © 2014-2021 ITdaan.com