[英]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