2009-04-13 10 views
9

Estoy creando una aplicación web que utiliza funciones auxiliares integradas de Rails para agregar funcionalidad ajax al sitio. No quiero que el usuario pueda usar la aplicación sin JS ya que no funcionará correctamente.Ruby on Rails, detección de Javascript

Necesito poder evitar esto. ¿Cómo puedo evitar que el usuario cargue cualquiera de mis páginas sin JS?

He intentado usar una etiqueta en mi diseño. Esto detecta la ausencia de JS pero aún representa las vistas. Poner la etiqueta del script alrededor del rendimiento impide que se represente cualquier vista.

¿Alguna idea sobre cómo hacer esto?

Respuesta

21

Puede tener un bloque noscript en el elemento head con una etiqueta meta refresh. Ejemplo:

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

se puede leer más acerca de meta refresh here

Esperanza esto ayuda

EDIT: Para aclarar, la etiqueta noscript sólo se ejecuta si JavaScript está desactivado para el usuario. Entonces, en este caso si el JS está apagado, el usuario será redirigido al http://yoursite.com/nojswarning.html. por supuesto, puede cambiar esto para que sea cualquier página en cualquier sitio que desee.

+0

gracias, excelente publicación, funcionó a la perfección. –

2

La respuesta simple es tener toda la carga de la aplicación a través de JS. De esta forma, la aplicación nunca se mostraría para alguien que tenga JS habilitado.

Una alternativa sería iniciar su página con un iframe, que se carga a una página de comprobación de JS. Todo lo que hace la página es redirigir al usuario a la verdadera URL de la aplicación a través de JS. Por lo tanto, si el usuario no tiene JS, no se los redireccionará (y puede informarles que necesitan JS con < noscript> etiquetas). (Digo usar un iframe para que no le proporcione a los usuarios que no son JS una URL fácil de acceder a la aplicación.)

0

El <noscript></noscript> parece funcionar. Me gustaría hacer que el predeterminado sea un pequeño cargador con una superposición, y si el cliente no admite javascript, javascript nunca ocultaría el cargador. Y el contenido en la etiqueta <noscript> se mostraría con la superposición.