2009-04-13 20 views
9

Sto creando un'app Web che utilizza le funzioni di supporto integrate di Rails per aggiungere funzionalità ajax al sito. Non voglio che l'utente sia in grado di utilizzare l'app senza JS in quanto non funzionerà correttamente.Ruby on Rails, rilevamento Javascript

Devo essere in grado di impedirlo. Come posso impedire all'utente di caricare una delle mie pagine senza JS?

Ho provato a utilizzare un tag nel mio layout. Ciò rileva l'assenza di JS, ma rende comunque le visualizzazioni. Mettendo il tag script attorno al rendimento si impedisce qualsiasi visualizzazione da renderizzare.

Qualche idea su come fare questo?

risposta

21

È possibile avere un blocco noscript nell'elemento head con un tag meta aggiornamento in esso. Esempio:

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

si può leggere di più su meta refresh here

Spero che questo aiuti

EDIT: Per chiarire, il tag noscript viene eseguito solo se JavaScript è disattivato per l'utente. Quindi, in questo caso, se il JS è disattivato, l'utente verrà reindirizzato a http://yoursite.com/nojswarning.html. ovviamente puoi cambiarlo in qualsiasi pagina su qualsiasi sito tu voglia.

+0

grazie, ottimo post, ha funzionato perfettamente. –

2

La risposta più semplice è caricare l'intera app tramite JS. In questo modo, l'app non mostrerebbe mai per qualcuno che ha abilitato JS.

Un'alternativa sarebbe quella di avviare la pagina con un iframe, che carica su una pagina di controllo JS. Tutta la pagina fa è reindirizzare l'utente al vero URL dell'app tramite JS. Pertanto, se l'utente non ha JS, non verrà reindirizzato (e puoi informarli che hanno bisogno di JS con tag < noscript>). (Dico di utilizzare un iframe in modo da non dare agli utenti non JS un URL facile per accedere all'app.)

0

Il <noscript></noscript> sembra funzionare. Vorrei rendere predefinito un piccolo caricatore con una sovrapposizione, e se il client non supporta javascript, il javascript non nasconderebbe mai il caricatore. E il contenuto nel tag <noscript> verrà mostrato con l'overlay.