2010-11-16 17 views
5

Estoy construyendo un sitio de enlaces profundos de AJAX.PHP: ¿cómo determinar si el navegador admite javascript en PHP?

Quiero que PHP cargue todo el código HTML de la página si el usuario intenta acceder al sitio con un navegador JavaScript no compatible o si se trata de un rastreador de búsqueda. Básicamente, PHP devolverá toda la página.

Por el contrario, cuando el usuario intenta acceder al sitio con el navegador compatible con Javascript, quiero que PHP devuelva solo el código de la plantilla y deje que Javascript (AJAX) se encargue del resto. Básicamente, PHP solo cargará elementos de diseño y permitirá que Javascript los rellene con contenido.

Analicé la función get_browser() de PHP, sin embargo, parece que no es una herramienta tan confiable. ¿Cuál es la práctica de la industria para ver si el navegador admite Javascript o es un rastreador de búsqueda que usa PHP?


Antecedentes:

por eso que quiero que el sitio tenga este comportamiento.

Como quiero que la página de inicio se cargue simplemente cargando la dirección: example.com, que no envía ninguna consulta a PHP, PHP devuelve el código HTML de la página de inicio. Sin embargo, esto causa problemas cuando el usuario intenta cargar la siguiente página: example.com#foo. Entonces, para este ejemplo, PHP devolverá la página de inicio y una vez que se cargue la página de inicio, Javascript (AJAX) cambiará el contenido para que muestre el contenido adecuado para #foo. Esto hará que el usuario vea la página de inicio, por lo tanto, el tiempo de carga será más lento y la experiencia del usuario no será tan agradable. Sin embargo, si mi script PHP puede descubrir que si el uso con el navegador compatible con Javascript está intentando cargar la página, solo devolverá la plantilla del sitio web, que no tiene contenido) y el javascript completará esa plantilla con el contenido que sea se supone que se muestra para #foo. Por otro lado, si el navegador JavaScript no separado o un rastreador intentará acceder a la página example.com#foo, se devolverá la página de inicio.

Estoy usando SWFaddress (http://www.asual.com/swfaddress/) biblioteca para el deep-linking.


Editar

Gracias chicos. No pensé en usar <noscript></noscript> antes.

Esto es lo que decidí hacer. PHP cargará por defecto páginas como example.com o example.com#foo (que es esencialmente lo mismo que example.com desde el punto de vista de PHP ya que los fragmentos por definición no se envían al servidor) en blanco (solo plantilla visual) con la etiqueta <noscript> dentro del contenido del página de inicio De esta forma, los usuarios con javascript no verán la página de inicio y AJAX rellenará el contenido de la página de acuerdo con el fragmento #foo. Por otro lado, los rastreadores de búsqueda y los usuarios sin javascript verán una página de inicio.

Gracias de nuevo. Creo que esta es una solución bastante simple y elegante. Si tiene más sugerencias, publique un comentario u otra respuesta.

+0

Considere el lado del servidor javascript como node.js - http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/ – ajreal

+0

Buena idea. Lamentablemente, no todos los proveedores de servidores lo tienen instalado o al menos el que estoy usando no lo tiene. – miki725

Respuesta

5

No se puede hacer esto usando PHP. Lo que se puede hacer sin embargo es utilizar una etiqueta noscript para redirigir a otra página PHP si no tienen javascript:

<noscript> 
<meta http-equiv="refresh" content="0; URL=nojavascript.php"> 
</noscript> 
+0

¿esto es compatible con los rastreadores de búsqueda? – miki725

+0

Los rastreadores lo recogerán, pero no sé si entrarán en esa URL. Siempre puede decirle si desea o no acceder a ese archivo en un archivo sitemap.xml – wajiw

1

No es posible lograr esto en la forma en que intentas hacerlo.

Es raro que alguien tiene JS apagado y no lo sabe.

PHP no consigue pasar nada después de #, JavaScript puede hacer nada con eso. Por lo tanto, incluso si PHP pudiera determinar si el navegador tiene activado Javascript, entonces no podría leer # de todos modos.

+0

Algunas personas (personas ciegas con lectores de pantalla o lectores braille, usuarios de teléfonos celulares, etc.) no tienen javascript. – trusktr

+0

Es raro, pero importante saberlo. – trusktr

0

Usted sólo debe construir una consulta de AJAX que establece una variable de sesión para javascript activado.

ejecutar esta consulta AJAX antes de cualquier otra información en el sitio se carga y luego hacer una redirección simple al sitio real.

Se podría hacer algo como esto pseudo código:

Index.php:

ajax(check_js.php); 
redirect(main_page.php); 

check_js.php

$_SESSION['js_enable'] = true; 

main_page.php

if($_SESSION['js_enable'] == true) { 
    //execute page 
} else { 
    header("Location: no_js_error.php"); 
} 
+0

@James Thompson. ¿Cómo funciona la consulta AJAX antes de conocer el JavaScript del navegador habilitado? – ajreal

+0

Esta idea funciona, menos eficiente que otras. Obtiene tráfico innecesario de esta manera. –

+0

No es así. Fallará si tienen JS deshabilitado y, por lo tanto, la variable de sesión de la página que dice que pueden usar JS nunca se establecerá. –

1

Usted podría incluir un enlace dentro de algunas etiquetas <NOSCRIPT> que apuntan al usuario a algo como example.com#foo?javascript=disabled.

Por desgracia, los navegadores no informaron si JS está habilitado o no, así que no hay manera de saber desde un simple HTTP GET si debe o no enviar JS páginas dependientes.

0

en lugar del servidor tratando de rastrear nuestros ajustes del usuario, cómo sobre el uso de unobtrusive javascript en el primer lugar? De esta manera, la página se degradará con gracia (al estado deseado) si JS no está disponible.

Cuestiones relacionadas