2009-11-03 18 views
7

Quiero redirigir al usuario a una página determinada si tiene javascript deshabilitado. Probé este código:<noscript> redirección

<noscript><?php url::redirect('controller/method'); ?></noscript> 
// url::redirect is much like the location header 

en vano ...

¿Cómo se hace esto?

+0

Este es un enfoque bastante pobre para tratar con clientes que no son JS: http://icant.co.uk/articles/pragmatic-progressive-enhancement/ – Quentin

+0

Posible duplicado de [No-Javascript Detection Script + Redirect] (http : //stackoverflow.com/questions/9895012/no-javascript-detection-script-redirect) – BalusC

Respuesta

2

No se puede usar la metaetiqueta y luego eliminarla con Javascript porque el navegador está configurado para redirigir al leer la metaetiqueta y es demasiado tarde para que JS la manipule.

La única manera es o hacer lo que sugirió Daniel, o para mostrar un enlace cuando no hay Javascript:

<noscript> 
<a href="">Click here to continue</a> 
</noscript> 

O puede probar a fallar con gracia: Do you plan for javascript being off?

+0

No necesita usar JS para manipular la etiqueta '' ... Se ignora si está contenido en el bloque '

5

No hay forma de hacer un redireccionamiento basado en si javascript está deshabilitado. ¿Por qué no hacer lo contrario: redirigir si javascript está habilitado?

<script> 
    window.location = "..."; 
</script> 
+0

Quiero evitar que se vea una página sin javascript ... ¿alguna idea sobre cómo hacerlo? – yretuta

+1

Puede cargar el contenido de la página con AJAX. Pregunta: ¿por qué querrías hacer eso? –

+0

porque la página depende de javascript, algo así como agregar un mapa de Google a la base de datos – yretuta

19

Desde las cabeceras ya se han enviado, tendrá que utilizar el formato HTML estándar:

<noscript> 
    <meta http-equiv="refresh" content="0;url=noscript.html"> 
</noscript> 

Intentar esto en Firefox e IE parece funcionar bien ... Con Javascript activado, la etiqueta <meta> se ignora. Cuando está deshabilitado, el navegador redirige a noscript.html.

+0

Esto no es una solución para todos. –

+2

¿Podría explicar más? – jheddings

+0

aunque funciona, los validadores odian eso. noscript no puede aparecer en el elemento de encabezado, meta no puede aparecer en el elemento de cuerpo. meta no puede aparecer en el elemento noscript. XHTML 1.0 y HTML 4.0. – mauris

0

añadir lo siguiente como primer elemento en su cuerpo, estilo para que se adapte, y tal vez ofrecer un enlace dentro de ella a una página noscript:

<div onload="return false;"> 
    <!-- PAGE CONTENTS --> 
</div><noscript>JAVASCRIPT IS REQUIRED TO VIEW THIS PAGE</noscript> 

utilizo un método más detallado de esta (que basicall y lo hace aparecer como un diálogo modal y todo muy bonito) en páginas donde un cliente no me permite usar más medios compatibles. He probado en IE6 + y en todos los otros navegadores principales con gran éxito.