2008-10-20 9 views
12

¿Hay alguna manera de restablecer el estado visitado en los enlaces?Restablecer el estado visitado en los enlaces

El escenario es este: en un sitio de intranet que naturalmente tiene muchos enlaces, queremos que un enlace tenga el estado de "visitado" durante un período de tiempo determinado solamente. Por lo tanto, estoy buscando una forma de manipular el estado visitado de los enlaces.

¿Es esto factible? Debería ser un navegador cruzado, por supuesto.

ETA: Las soluciones del lado del cliente son perfectamente aceptables. Preferido incluso ... :-)

ETA-2: Se permiten cookies. Sin restricciones :-)

+1

¿Se permiten las cookies? :) – TheObserver

Respuesta

2

Creo que esto es una propiedad del navegador, por lo que no se puede controlar desde el lado del servidor.

Un 'truco' podría ser agregar una cadena de consulta no utilizada al final de los enlaces, y rotarlos periódicamente. Aunque esto significa que la duración del estado "visitado" para un cliente en particular depende de cuándo gira la cadena de consulta en lugar de un período de tiempo fijo.

3

Si una solución del lado del servidor sencillo con "Cambio de direcciones URL", como:

"http://url1?expire2008_10_20" que se convierte en "http://url1?expire2008_10_21" después de 24 horas,

no funciona, se puede utilizar el siguiente:

Deje que el servidor almacene una cookie en un navegador con la última hora visitada del enlace. Si no habría una gran cantidad de enlaces y longitud máxima cookie no sería suficiente, puede elegir

  1. tienda de una cookie de sesión y mantener los datos visitados en el servidor
  2. uso análogo de inflamación de las galletas - Local Shared Object

También coloque un código que aleatorice la url para el cliente si ha expirado la última visita.

7

Los enlaces aparecen como "visitados" cuando el navegador elige aplicar el :visitedCSS pseudo-class.

La forma del lado del cliente para restablecer los enlaces al estado no visitado es (de alguna manera) borrar el historial de navegación. Me sorprendería mucho saber que hay una forma portátil de hacerlo. También tiene efectos secundarios desagradables, como paralizar el comportamiento de las barras de ubicación inteligentes sensibles a la historia como la de Firefox 3.

Como sugirió Drew Noakes, una forma de servidor es agregar algunos parámetros de consulta de ruido a los enlaces y periódicamente cambie el parámetro de consulta. Esto solo da una mala aproximación del comportamiento que desea. Para obtener el comportamiento "correcto" necesitaría rastrear el historial de páginas visitadas por lado del servidor del usuario, para que pueda cambiar el parámetro de ruido para una página específica solo después del tiempo requerido.

Dicho todo esto, es muy probable que sea una mala idea tratar de "restablecer el estado visitado en los enlaces".

Creo que una mejor solución sería modificar el estilo de la página para que la pseudoclase visitada exprese lo mismo que la pseudoclase del enlace. Luego mantenga un historial del lado del servidor de los enlaces visitados por usuario, y ajuste la visualización de los enlaces usando una clase explícita visited.

Si no tiene a mano la identidad del usuario y no desea requerir el inicio de sesión, siempre puede usar una cookie aleatoria persistente.

0

Cambie la página de destino para aceptar un parámetro de una cadena de consulta y para establecer una cookie con una duración adecuada para ese valor.

En la página de referencia, ponga algo de Javascript para verificar la existencia de la cookie.

Si no existe, tener el Javascript añadir un parámetro a la URL con un gran número aleatorio en ella (por lo que la historia del navegador no lo reconocerá.)

Si existe, tienen la javascript añadir un parámetro con el mismo valor que la cookie (por lo que la historia del navegador reconoce.)

Notas:

  • supongo que el destino del enlace está en el mismo dominio que la página de referencia . De lo contrario, use una página de redirección en el mismo dominio.

  • Esto solo funcionará si el historial del navegador es tan largo como la vida de la cookie. Si tiene un historial de navegador corto o inexistente, el cliente no lo mostrará como visitado.

  • ¡No hagas esto! Sus usuarios tienen una buena comprensión de lo que significa "visitado". no lo rompa, solo los confundirá.

  • ¿Necesita considerar las soluciones del lado del servidor para las personas que no ejecutan Javascript?

  • No he probado este diseño.

6

siento algo maloliente en la idea.

¿cuál es el propósito de restablecer el estado visitado de enlace? para notificar que algunos datos nuevos están disponibles? entonces tal vez algo más detallado como "NUEVA" imagen sería más apropiado?

por el contrario si realmente necesita hacer esto - cambiar la URL

+1

Es una intranet. Todos los enlaces serán visitados rápidamente por cualquier usuario. Por lo tanto, el estado visitado pierde cualquier significado si no se restablece de vez en cuando. – erlando

+1

entonces hay una pregunta ¿por qué es necesario distinguir entre los enlaces visitados y no visitados? ¿hay alguna ventaja real de usabilidad? – miceuz

+2

Esto lo resuelve todo, @erlando. Si desea restablecer el estado visitado, agregue algo al final de cada enlace que desee, como http: // intranet/link # modified-2010-03-17 – cregox

0

Mantener una lista de URLs visitado, fecha y hora de sesión de los usuarios.

Cuando la página del enlace de cargas

  • urls rancios ras enlaces
  • estilo contenidas en la lista como visitado.
0

Como el problema de pura visualización no necesita preocuparse por marcar de alguna manera los enlaces visitados de nuevo a no visitados.

Agregue un controlador onclick a sus enlaces que cambie el estilo del enlace para parecerse al estado visitado. Desde este controlador puedes, por ejemplo. escribe el estado del enlace en una cookie.

Luego puede verificar periódicamente si hay enlaces que ya no deberían ser visibles y cambiar el estilo a la normalidad.

6

¿Quiere simplemente hacer que los enlaces "visitados" se vean diferentes durante cierto tiempo? Esto es fácil si omite el pseudoclases :visited del navegador y simplemente asigna un nombre de clase personalizado. Usar cookies; tienen vencimiento incorporado.

Configure un controlador de JavaScript para cuando hace clic en los enlaces. Pseudocódigo:

function clickHandler(event) { 
    var href = /* (figure out which anchor was clicked and get the href) */ 
    // (you might need to escape the href) 

    setCookie(href, "visited", 5); // set cookie for 5 days 
} 

Ejecutará esta función justo antes de seguir el enlace.

Entonces, al cargar la página, se puede hacer algo como esto:

function markVisitedLinks() { 
    var anchors = document.getElementsByTagName("a"); 

    for (var i = 0; i < anchors.length; i++) { 
    if (readCookie(anchors[i].href) == "visited") { 
     anchors[i].className += " visited"; 
    } 
    } 
} 

Grab the setCookie and readCookie functions de quirksmode.

1

Cambiar el funcionamiento de los enlaces generalmente confundirá y/o molestará a los usuarios. Es una manera segura de reducir la capacidad de uso percibida de su sitio.

¿Qué estás realmente tratando de lograr?

Si tiene páginas secundarias en su sitio que cambian (apuntando a contenido nuevo) sus usuarios lo averiguarán. Si tiene un nuevo artículo brillante de dos o tres niveles en la estructura de su página, agregue una sección de lo nuevo con un enlace en su página principal si es tan importante. (O envíe un aviso con un enlace en un correo electrónico, o ...)

1

¿Es suficiente simplemente formatear la propiedad CSS :visited del enlace para que parezca que nunca se hizo clic?

No sé si desea realizar un seguimiento de los enlaces visitados por un tiempo o simplemente mostrarlos de la misma manera todo el tiempo; si este último, entonces un simple CSS (como a continuación) haría.

a, a:visited { 
    color: blue; 
    text-decoration: underline 
} 

a:hover, a:active { 
    color: orange; 
} 

Cuestiones relacionadas