Reputation: 11317
Google Chrome does not refresh accessibility elements (AutomationElement) when a user scrolls down in the browser.
To reproduce it:
"chrome --force-render-accessibility"
or by setting on Global Accessibility at "chrome://accessibility"
.I found some manual solutions that can force Chrome to refresh it:
chrome://accessibility/
What I'm looking for is the ability to do one of these operations programatically, or any operation that can make Chrome refresh its cache tree.
What I've tried:
PInvoke/MoveWindow
PInvoke/Redrawwindow
chrome.tabs.setZoom(null, 0);
(working but blink and slow down the window)None of these are working properly.
EDIT: Tested with Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev under Windows 7.
Upvotes: 154
Views: 5933
Reputation: 639
Scrolling in simple pages is optimized to not require computation from the renderer. Only the compositor and the GPU are needed to scroll therefore the render tree which is only updated from the renderer is still the same.
Requiring the renderer to traverse the DOM and update the Accessibility tree during a scroll runs contrary with the several years effort of having smooth scrolling, specially for touch devices so I don't think you are going to get traction on a bug fix.
Your idea of an extension I think is the best (although ugly) compromise. But rather that changing zoom, doing a small mutation of the page (or DOM) might be a better solution. Try for example adding a invisible (or nearly so) element with a low z-order. You will also need to rate control the mutation so it only happens 1 times per second or even less often.
Upvotes: 1
Reputation: 7
Chrome's multi-process architecture is different from that of any other browser. For security, the main browser UI is in one process, and web pages are run in separate renderer processes (typically one per tab). The Renderer processes are the only ones with a representation of the webpage's DOM and therefore all of the accessibility information, but the renderer processes are specifically not allowed to interact with the operating system (sending or receiving events or messages) - in particular, the renderer processes cannot send or receive accessibility events.
Upvotes: -1