Pregunta

Un número de nuestros usuarios sólo han actualizado desde IE6 a IE7. los usuarios upgreaded están reportando un problema con los enlaces visitados volviendo a su color no visitado después de una actualización de la página. Esto sólo ocurre a los enlaces que están utilizando Javascript en lugar de una dirección URL codificado:

<script lang="JavaScript">
<!--
 function LoadGoogle()
 {
  var LoadGoogle = window.open('http://www.google.com');
 }
-->
</script>

<a href="javascript:LoadGoogle()">Google using javascript</a>
<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>

Los enlaces de arriba volverá a ser el color no visitado cada vez que se actualiza la página. No importa si la página se actualiza a causa de una vuelta después, golpear manualmente el botón de actualización o f5, o de una función de actualización automática. Tenga en cuenta, el código anterior es una simplificación más de lo que está sucediendo realmente, pero creo que ilustra el tema lo suficientemente bien.

Esto está causando un problema para nuestros usuarios, porque les estamos proporcionando una lista de los artículos que se abrió todo en nuevas ventanas a través de JavaScript cuando se hace clic; y actualizar la página principal cuando los usuarios están acabados con ellos. Cada vez que la página principal se actualiza todos estos enlaces volverá a su color no visitado, para que nuestros usuarios están perdiendo seguimiento de los elementos que han trabajado.

He estado excavando alrededor y parece que esto está destinado comportamiento. IE7 no registra estos vínculos con la historia de los navegadores. ¿Alguien sabe una solución alternativa que nos permitirá mantener estos enlaces javascript en el estado visitado sin tener que hacer una importante revisión del código de las aplicaciones?

Gracias.

¿Fue útil?

Solución

Realmente no se puede esperar una URL javascript: a mantener la visitó / estado no visitado. Son lugares no reales, son órdenes para el navegador para ejecutar en el documento actual.

URL javascript: debe también no ser utilizado.

<a href="javascript:LoadGoogle()">Google using javascript</a>

Esto es un desastre total para la accesibilidad y la usabilidad. Y por lo general por razones de SEO también, aunque para una aplicación interna que no importaría (y posiblemente Google están haciendo bien con su SEO sin su ayuda; -.))

<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>

Esto es todavía mal por las mismas razones, además de que ha olvidado a return false en el controlador de clic, por lo que la página se desplaza a la parte superior, y la javascript: al inicio del controlador de eventos no tiene sentido ya que no es una URL. (En este contexto, javascript: se toma como una etiqueta de línea, que es una característica del lenguaje casi-totalmente-sentido de que nadie nunca realmente usos.)

Este es el tipo de marcado que querría:

<a href="http://www.google.com/" onclick="window.open(this); return false;">Google proper link</a>

(En realidad lo que probablemente discreta-script que en lugar de incluir el atributo onclick.)

Esto funcionaría en todos los dispositivos, JavaScript disponible o no, el navegador visual o no, se va a mostrar el enlace apropiado en la barra de estado, y que va a permitir al usuario utilizar todas sus herramientas normales navegador como botón central del ratón -para-new-tab o haga clic-marcador-enlace en el enlace sin obtener la misma página, una página en blanco o un error en su lugar.

Naturalmente, será también reflejar correctamente el estado visitado / no visitado de la página de destino en sí, que es mucho más probable que sea preciso que un javascript: espuria pseudo-URL. Señalando el atributo href a una ubicación real que realmente ha sido visitada es la única manera confiable de obtener representación :visited.

Otros consejos

Interesante, nunca he topado con este problema antes, pero tiene sentido.

Las posibles soluciones (no puedo ponerlos a prueba en este momento, así que sólo hay que tirarlos a su disposición para probar si usted quiere):

  • Use hash únicos: <a href="#JavaScriptLoadGoogle" onClick="...

    Tal vez esto es suficiente para IE para hacer este enlace permanente "visitada": Es una ubicación válida. (No tiene por qué existir un ancla real de ese nombre en la página.)

  • Si una aplicación que requiere JS, sólo podría poner que serán visitados en el atributo href:

    <a href='http://www.google.com' 
       onclick='LoadGoogle(); return false;'>  
    <!-- You don't need the Javascript: prefix here -->
    

    No estoy seguro de si este método se registrará la URL como visitado, sin embargo, porque estamos volviendo false en el evento de clic.

Tal vez una de estas soluciones de TI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top