2015-10-22 25 views
6

Ho riscontrato un problema durante il test della nostra webapp per l'accessibilità che, nonostante sia apparentemente molto semplice, non ho potuto trovare una risposta chiara su Google.Che cosa determina se viene visitato un collegamento?

Il problema è che lo screen reader (in particolare Voice Over in iOS e OSX Safari) legge ogni collegamento interno nell'app come "Visited Link" anche prima che l'utente abbia fatto clic su uno di essi. I link hanno tutti la stessa base (qualcosa come http://domain.com/path/index.html#what-the-link-does), quindi il mio primo istinto è che, poiché questi link puntano tutti a diversi hash sullo stesso file, i collegamenti sono visti come visitati perché quel file è stato visitato.

Tuttavia, questo non è il comportamento desiderato. Vorremmo che tutti i link fossero semplicemente "Link". Quindi ecco le mie domande:

  1. Che cosa determina se il collegamento è considerato visitato? Sarà solo visitando il dominio? La visita di un file specifico lo causerà? O i diversi hash dello stesso file devono avere stati visitati diversi?

  2. Esiste un modo per controllare questo comportamento e impedire che i collegamenti vengano letti come visitati? Qualche parametro di Aria forse?

+0

se avete bisogno di marcare tutti loro come non visitati è possibile utilizzando 'un: visited' selettore, ma non è possibile sapere quale collegare visitò e che non ha fatto se non hai codice js nel tuo sito che copi il link ai cookie o al database prima di reindirizzare ad esso (come stanno facendo Facebook e Google ora), ma se l'utente visita il link da fuori del tuo sito non vorresti so – robert

+0

e, in ogni modo, salvando i collegamenti che l'utente visitato nel tuo sito considera "Violazione della privacy", quindi se lo fai dovresti avvisare gli utenti di questo – robert

+0

Se l'utente è andato su http://example.com /path/index.html di tutti i link ad esso saranno visitati. L'hash non significa altro che una posizione sulla pagina. – epascarello

risposta

1

forse ho capito la domanda, ma se il vostro link sono in index.html nel tuo esempio, si fa a non sostituire

http://domain.com/path/index.html#what-the-link-does 

con semplicemente

#what-the-link-does 

La logica visitato è probabilmente solo guardando l'URI senza tag di query string/anchor viene preso in considerazione

+0

Penso che tu mi abbia indicato nella giusta direzione. Dopo aver dato un'altra occhiata a questo ho notato che alcuni link puntavano semplicemente a "" # "' con il comportamento dei clic controllato completamente da JS. Sospetto che se modifico i collegamenti a "" # a-unique-value "' allora sarà meno probabile che vengano considerati visitati. – Kris

0

È dipendente dall'implementazione. Secondo the spec,

E 'possibile per gli autori dei fogli di stile di abusare del: link e: visited pseudo-classi per determinare quali siti un utente ha visitato, senza il consenso dell'utente .

Gli UA possono quindi considerare tutti i collegamenti come collegamenti non visitati o implementare altre misure per preservare la privacy dell'utente durante il rendering dei collegamenti visitati e non visitati in modo diverso.

La specifica richiede solo :link e :visited escludersi a vicenda, ma non specifica come.

+1

Il problema qui è che i collegamenti _unvisited_ sono trattati come collegamenti visitati, non il contrario. –

+0

Sì, questo è il problema. Non esiste uno stile per ': visited', quindi sembra tutto a posto. Voglio solo che lo screen reader smetta di leggere ogni link come se fosse visitato. – Kris

0

Penso che il problema riscontrato sia un'errata applicazione del tag di ancoraggio in s all'accessibilità. Presumo che tu stia codificando un'applicazione a singola pagina e ogni link a una vista diversa è un'ancora. Dovresti utilizzare un tag con il pulsante invece con un ninjitsu CSS.C'è un fantastico articolo su questa cosa esattamente qui:

http://www.karlgroves.com/2013/05/14/links-are-not-buttons-neither-are-divs-and-spans/