Domanda

Un certo numero di nostri utenti hanno appena aggiornato da IE6 a IE7. gli utenti upgreaded stanno segnalando un problema con i link visitati spettanti ad il loro colore non visitati dopo un refresh della pagina. Questo accade solo per i collegamenti che utilizzano javascript invece di un URL hard coded:

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

I collegamenti di cui sopra si ritorna al colore non visitati ogni volta che la pagina viene aggiornata. Non importa se la pagina viene aggiornata a causa di un palo, colpendo manualmente il pulsante di aggiornamento o F5, o da una funzione di aggiornamento automatico. Si prega di notare, il codice di cui sopra è una semplificazione nel corso di ciò che sta realmente accadendo, ma credo che illustra il problema abbastanza bene.

Questo sta causando un problema per i nostri utenti, perché stiamo fornendo loro con un elenco di elementi che sono tutti si apriva in nuove finestre tramite JavaScript quando si fa clic; e aggiornare la pagina genitore quando gli utenti sono finiti con loro. Ogni volta che la pagina padre viene aggiornata tutti questi collegamenti tornare al loro colore non visitati, così i nostri utenti stanno perdendo traccia di quali elementi hanno lavorato su.

Sono stato a scavare intorno e sembra che questo comportamento è destinato. IE7 non registra questi legami con la storia dei browser. Qualcuno sa un lavoro in giro che ci permetterà di mantenere tali javascript collegamenti nello stato visitato senza dover fare una profonda revisione del codice apps?

Grazie.

È stato utile?

Soluzione

Non si può davvero aspettarsi un URL javascript: per mantenere visitato / stato non visitati. Sono posizioni non reali, sono i comandi al browser di eseguire nel documento corrente.

URL javascript: dovrebbe anche non essere utilizzato.

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

Questo è un disastro totale per l'accessibilità e l'usabilità. E di solito per motivi di SEO troppo, anche se per un app interno che sarebbe poco importa (e possibilmente di Google stanno facendo bene con loro SEO senza il tuo aiuto, -.))

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

Questo è ancora un male per le stesse ragioni, più hai dimenticato di return false nel gestore click, quindi la pagina scorre verso l'alto, e la javascript: alla partenza del gestore di eventi è privo di significato in quanto non è un URL. (In questo contesto, javascript: è considerato come un etichetta di riga, che è una caratteristica del linguaggio quasi totalmente inutile che nessuno usa mai veramente.)

Questo è il tipo di markup che ci si vuole:

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

(In realtà si sarebbe probabilmente discreto-script che piuttosto che includono l'attributo onclick.)

Questo dovrebbe funzionare su tutti i dispositivi, JavaScript disponibile o meno, il browser visivo o no, che verrà visualizzato il link corretto nella barra di stato, e sarà consentire all'utente di utilizzare tutte le loro normali strumenti del browser come middle-click -per-new-scheda oppure fare clic destro-segnalibro-link sul link senza ottenere la stessa pagina, una pagina vuota o un errore, invece.

Naturalmente, sarà anche riflettere correttamente il visitato Stato / non visitati della pagina di destinazione in sé, che è molto più probabile che sia preciso di un spurio javascript: pseudo-URL. Indicando l'attributo href ad una posizione attuale che è stato veramente visitato è l'unico modo affidabile per ottenere il rendering :visited.

Altri suggerimenti

Interessante, non ho mai incontrato questo problema prima ma ha senso.

possibili soluzioni alternative (non riesco a testarli in questo momento quindi non mi resta che buttare qui per voi di provare se si vuole):

  • Utilizzare hash uniche: <a href="#JavaScriptLoadGoogle" onClick="...

    Forse questo è sufficiente per IE per rendere questo link in modo permanente "visitato": Si tratta di un percorso valido. (Non deve esistere un ancoraggio effettivo di tale nome nella pagina.)

  • Se questo un'applicazione che richiede JS, si può solo mettere che sarà visitato nel l'attributo href:

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

    Non sono sicuro se questo metodo registrerà l'URL, visitato, però, perché stiamo tornando false in caso click.

Forse uno di questi lo ripara.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top