2

Un certain nombre de nos utilisateurs viennent de passer de IE6 à IE7. les utilisateurs upgreaded signalent un problème avec les liens visités revenant à leur couleur non visitée après une actualisation de la page. Cela ne se produit aux liens qui utilisent javascript au lieu d'une URL codée en dur:IE7 - les liens visités reviennent à l'état invariable après la mise à jour de la page

<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> 

Les liens ci-dessus redeviendra la couleur unvisited chaque fois que la page est actualisée. Peu importe si la page est rafraîchie à cause d'un post-retour, en appuyant manuellement sur le bouton Actualiser ou F5, ou à partir d'une fonction d'actualisation automatique. S'il vous plaît noter, le code ci-dessus est une simplification par-dessus de ce qui se passe réellement, mais je crois qu'il illustre assez bien la question. Ceci cause un problème pour nos utilisateurs car nous leur fournissons une liste d'éléments qui sont tous ouverts dans de nouvelles fenêtres via javascript quand ils sont cliqués; et actualisez la page parent lorsque les utilisateurs en ont fini avec eux. Chaque fois que la page parent est actualisée, tous les liens reviennent à leur couleur non visitée, de sorte que nos utilisateurs perdent la trace des éléments sur lesquels ils ont travaillé. J'ai creusé autour et il semble que ce comportement est prévu. IE7 n'enregistre pas ces liens dans l'historique des navigateurs. Est-ce que quelqu'un sait un travail qui nous permettra de garder ces liens javascript dans l'état visité sans avoir à faire une refonte majeure du code des applications?

Merci.

Répondre

1

Vous ne pouvez pas vraiment attendre une URL javascript: pour maintenir l'état visité/non visité. Ce ne sont pas des emplacements réels, ce sont des commandes que le navigateur doit exécuter dans le document en cours.

javascript: Les URL ne doivent également jamais être utilisées.

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

Ceci est un désastre total pour l'accessibilité et la facilité d'utilisation. Et généralement pour des raisons de SEO aussi, mais pour une application interne qui n'aurait pas d'importance (et peut-être que Google se débrouille bien avec son référencement sans votre aide.;-))

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

C'est toujours mauvais pour les mêmes raisons, plus vous avez oublié de return false dans le gestionnaire de clic, de sorte que la page défile vers le haut, et le javascript: au début du gestionnaire d'événements est sans signification car ce n'est pas une URL. (Dans ce contexte, javascript: est pris comme une étiquette de ligne, ce qui est une caractéristique de la langue presque totalement inutile que personne ne jamais utilise vraiment.)

C'est le genre de balisage que vous voudriez:

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

(En réalité, vous auriez probablement script discret que plutôt que d'inclure l'attribut onclick.)

Cela fonctionne sur tous les appareils, JavaScript disponibles ou non, navigateur visuel ou non, il va montrer la bonne lien dans la barre d'état, et il permettra à l'utilisateur d'utiliser tous leurs outils de navigation normaux comme le milieu-cliquez-pour-nouveau-onglet ou r ight-click-bookmark-lien sur le lien sans obtenir la même page, une page blanche ou une erreur à la place. Naturellement, il reflétera également correctement l'état visité/non visité de la page cible elle-même, ce qui est beaucoup plus susceptible d'être exact qu'une pseudo-URL erronée javascript:. Pointant l'attribut href à un emplacement réel qui a été réellement visité est le seul moyen fiable d'obtenir le rendu :visited.

0

Intéressant, je n'ai jamais rencontré ce problème auparavant, mais c'est logique.

solutions de contournement possibles (je ne peux pas les tester en ce moment donc je dois juste les jeter ici pour vous d'essayer si vous voulez):

  • Utilisez hashes uniques: <a href="#JavaScriptLoadGoogle" onClick="...

    Peut-être que cela suffit à IE pour rendre ce lien permanent "visité": C'est un emplacement valide. (Il ne doit pas exister une ancre réelle de ce nom dans la page.)

  • Si cette une application qui nécessite JS, vous pouvez simplement mettre qui seront visités dans l'attribut href:

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

    Je ne suis pas sûr si cette méthode va enregistrer l'URL comme visité, cependant, parce que nous retournons false dans l'événement click.

Peut-être que l'un d'entre eux le corrige.