2009-04-13 11 views
9

Je crée une application web qui utilise les fonctions d'aide intégrées de Rails pour ajouter des fonctionnalités ajax au site. Je ne veux pas que l'utilisateur puisse utiliser l'application sans JS car il ne fonctionnera pas correctement.Ruby on Rails, détection Javascript

Je dois être en mesure d'empêcher cela. Comment puis-je empêcher l'utilisateur de charger l'une de mes pages sans JS?

J'ai essayé d'utiliser une étiquette dans ma mise en page. Cela détecte l'absence de JS mais restitue les vues. Si vous placez la balise de script autour du rendement, aucune vue ne sera rendue.

Des idées sur comment faire cela?

Répondre

21

Vous pouvez avoir un bloc noscript dans l'élément head avec une balise meta refresh dedans. Exemple:

<head> 
    <!-- title, scripts, css etc go here --> 
    <noscript> 
     <meta http-equiv="refresh" content="2;url=http://yoursite.com/nojswarning.html"> 
    </noscript> 
</head> 

vous pouvez en savoir plus sur meta refresh here

Hope this helps

EDIT: Pour clarifier les choses, la balise noscript ne fonctionne que si JavaScript est désactivé pour l'utilisateur. Donc, dans ce cas, si le JS est désactivé, l'utilisateur sera redirigé vers http://yoursite.com/nojswarning.html. bien sûr, vous pouvez changer cela pour être n'importe quelle page sur n'importe quel site que vous voulez.

+0

merci, bon post, a parfaitement fonctionné. –

2

La réponse simple est de charger l'application entière via JS. De cette façon, l'application ne s'affichera jamais pour quelqu'un qui a JS activé.

Une alternative serait de commencer votre page avec un iframe, qui charge à une page de vérification JS. Toute la page redirige l'utilisateur vers la véritable URL de l'application via JS. Ainsi, si l'utilisateur n'a pas JS, ils ne seront pas redirigés (et vous pouvez les informer qu'ils ont besoin de JS avec les balises < noscript). (Je dis d'utiliser un iframe afin de ne pas donner aux utilisateurs non-JS une URL facile pour accéder à l'application avec.)

0

Le <noscript></noscript> semble fonctionner. Je ferais du petit chargeur avec un overlay par défaut, et si le client ne supporte pas javascript, le javascript ne cacherait jamais le loader. Et le contenu de la balise <noscript> s'affichera avec la superposition.