Is there a way to test to see if javascript is enabled to ensure an application that required javascript is not initiated when it is disabled or otherwise not available?
6 Answers
There is <noscript>.
2 Comments
Colin Pickard
remember the caveat with noscript - even if it is not used, it does not guarantee that javascipt is available or working correctly. You can see this by using Firefox Web Developer to turn off javascript.
Marcel Korpel
@Colin: NoScript users will suffer the same: stackoverflow.com/questions/993387/…
I tend to use the following way.
1) show an error message per default
<div id="noJS">For use, you need JavaScript enabled. (nice images and perhaps a link to your fav. browser)</div>
2) disable it via javascript and show the main app's container
$("#noJS").hide();
$("#app").show();
If javascript is only needed for e.g. navigation, you should try to deliver a non-js version for non-js users in order to increase your audience.
4 Comments
Colin Pickard
stackoverflow uses this technique too (to display a red banner at the top of the page)
scunliffe
I would expand 'js' to 'JavaScript' in a message like this. Many end users may have no clue what 'js' is.
Dan
That's jQuery. Might be worth mentioning this.
saji89
@ColinPickard Stackoverflow uses <noscript> tag to show the warning div. And not the method that has been defined in this answer. Use of <noscript> is the standard method.
The scenario is:
- Visitor makes first request to your site
- Deliver a page which sets two cookiesl one with javascript, another with your server side language.
- Header or Meta redirect to another page for testing.
- On test page, check if you received the server delivered cookie to see if cookie support is enabled, and test if javascript cookie was received for JS support enabled.
- Enjoy your new found knowledge.
Comments
Not on initial load. You can try to use tricks like setting a cookie in JavaScript and check it on subsequent requests. The best way is to ensure that your site works without JavaScript, and use JavaScript to provide a better experience.