Problema della cache dell'albero accessibile di Google Chrome con UI Automation


154

Google Chrome non aggiorna gli elementi di accessibilità ( AutomationElement ) quando un utente scorre verso il basso nel browser.

Per riprodurlo:

  1. Abilita l'accessibilità del renderer con: "chrome --force-render-accessibility"o impostando Accessibilità globale su "chrome://accessibility".
  2. Vai su http://en.wikipedia.org/wiki/Google
  3. Apri inspect.exe in UI Automation Mode (da Windows Kits), cerca l'elemento "Collegamenti ad articoli correlati".
  4. Torna a Chrome, scorri verso il basso fino a quando "Link ad articoli correlati" in basso è visibile
  5. L'elemento "Collegamenti ad articoli correlati" è contrassegnato dallo schermo

Ho trovato alcune soluzioni manuali che possono costringere Chrome ad aggiornarlo:

  1. Imposta Zoom su 90%, quindi ripristinalo su 100% (modo molto brutto)
  2. Disattiva l'accessibilità, quindi attiva chrome://accessibility/

Quello che sto cercando è la possibilità di eseguire una di queste operazioni a livello di codice o qualsiasi operazione che possa far aggiornare Chrome al suo albero della cache.


Cosa ho provato:

  • Ridimensiona la finestra con PInvoke/MoveWindow
  • Ridisegna la finestra con PInvoke/Redrawwindow
  • Costruisci un'estensione cromata e forza lo zoom al 100% su richiesta: chrome.tabs.setZoom(null, 0);(funziona ma lampeggia e rallenta la finestra)

Nessuno di questi funziona correttamente.

EDIT : testato con Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev in Windows 7.


13
Dovresti segnalarlo al bug di accessibilità di chromium su Windows: code.google.com/p/chromium/issues/…
Simon Mourier,

5
Puoi condividere alcune informazioni su cosa stai cercando di fare una volta risolto il problema? forse c'è una soluzione ...
DoronG,

@ Ksv3n, inserisci il link al bug che hai pubblicato
Mauricio Gracia Gutierrez,

@ Ksv3n Hai provato a fare lo stesso test su un altro browser? Firefox potrebbe essere?
PseudoAj,

@Emzor grazie per aver cercato di apportare modifiche, ma per favore astieniti dal fare modifiche banali per rendere i link "migliori". A volte i collegamenti sono mostrati meglio in modo completo in modo che l'utente possa copiarlo e incollarlo se necessario.
gitsitgo,

Risposte:


1

Lo scorrimento in pagine semplici è ottimizzato per non richiedere il calcolo dal renderer. Sono necessari solo il compositore e la GPU per scorrere, pertanto l'albero di rendering che viene aggiornato solo dal renderer è sempre lo stesso.

Richiedere al renderer di attraversare il DOM e aggiornare l'albero di accessibilità durante uno scorrimento corre in contrasto con lo sforzo di diversi anni di uno scorrimento regolare, specialmente per i dispositivi touch, quindi non penso che otterrai una trazione su una correzione di bug.

La tua idea di estensione penso sia il miglior (anche se brutto) compromesso. Ma piuttosto che cambiare lo zoom, fare una piccola mutazione della pagina (o DOM) potrebbe essere una soluzione migliore. Prova ad esempio ad aggiungere un elemento invisibile (o quasi) con un ordine z basso. Dovrai anche controllare la mutazione in modo che avvenga solo 1 volta al secondo o anche meno spesso.


1
Rompere l'accessibilità quando viene esplicitamente richiesto nella configurazione o nei parametri, nel nome dello scrolling soffocante sembra male.
Manuell,

1
@manuell ecco perché esistono le estensioni. Quando le tue priorità sono in contrasto con le priorità del browser, puoi prenderne il controllo. Il tuo cliente che installa il segnale di estensione è d'accordo con te e non con il team Chrome.
AlienRancher,

-1

L'architettura multi-processo di Chrome è diversa da quella di qualsiasi altro browser. Per motivi di sicurezza, l'interfaccia utente del browser principale è in un processo e le pagine Web vengono eseguite in processi di rendering separati (in genere uno per scheda). I processi di rendering sono gli unici con una rappresentazione del DOM della pagina Web e quindi di tutte le informazioni di accessibilità, ma i processi di rendering non sono specificamente autorizzati a interagire con il sistema operativo (invio o ricezione di eventi o messaggi) - in particolare, il renderer i processi non possono inviare o ricevere eventi di accessibilità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.