Проблема с доступным кешем в Google Chrome с помощью пользовательского интерфейса

154

Google Chrome не обновляет элементы специальных возможностей ( AutomationElement ), когда пользователь прокручивает страницу в браузере.

Чтобы воспроизвести это:

  1. Включите доступность рендерера с помощью: "chrome --force-render-accessibility"или установив Глобальную доступность на "chrome://accessibility".
  2. Перейдите на страницу http://en.wikipedia.org/wiki/Google.
  3. Откройте inspect.exe в режиме автоматизации пользовательского интерфейса (из комплектов Windows), найдите элемент «Ссылки на связанные статьи».
  4. Вернитесь в Chrome, прокрутите вниз, пока внизу не появится «Ссылки на связанные статьи» внизу.
  5. Элемент «Ссылки на похожие статьи» выделен вне экрана

Я нашел несколько ручных решений, которые могут заставить Chrome обновить его:

  1. Установите Zoom на 90%, затем установите его обратно на 100% (очень и очень уродливо)
  2. Выключите доступ, затем включите chrome://accessibility/

Что я ищу, так это возможность программно выполнить одну из этих операций или любую операцию, которая может заставить Chrome обновить свое дерево кеша.


Что я пробовал:

  • Изменить размер окна с PInvoke/MoveWindow
  • Перерисовать окно с PInvoke/Redrawwindow
  • Создание расширения Chrome и принудительное увеличение до 100% по требованию: chrome.tabs.setZoom(null, 0);(работает, но мигает и замедляет окно)

Ни один из них не работает должным образом.

РЕДАКТИРОВАТЬ : Протестировано с Google Chrome 40.XX, 41.XX, 42.XX, 43.XX, 44.XX, 45.XX, 46.XX, 47.XX.Dev, 48.XX.Dev под Windows 7.

Perfect28
источник
13
Вы должны сообщить об этом в баг с доступностью Chromium в
Саймон Мурье,
5
Можете ли вы поделиться информацией о том, что вы пытаетесь сделать, когда решите проблему? может быть, есть обходной путь ...
DoronG
@ Ksv3n, пожалуйста, опубликуйте ссылку на ошибку, которую вы опубликовали
Маурисио Грасия Гутьеррес
@ Ksv3n Вы пытались сделать тот же тест на другом браузере? Firefox может быть?
PseudoAj
@Emzor спасибо за попытку внесения изменений, но, пожалуйста, воздержитесь от простых изменений, чтобы ссылки выглядели «лучше». Иногда ссылки лучше показывать полностью, поэтому пользователь может скопировать и вставить их, если это необходимо.
gitsitgo

Ответы:

1

Прокрутка на простых страницах оптимизирована, чтобы не требовать вычислений от средства визуализации. Для прокрутки требуются только композитор и графический процессор, поэтому дерево рендеринга, которое обновляется только из рендерера, остается прежним.

Требование, чтобы средство визуализации проходило через DOM и обновляло дерево доступности во время прокрутки, противоречит многолетним усилиям по плавной прокрутке, особенно для сенсорных устройств, поэтому я не думаю, что вам удастся исправить ошибку.

Я думаю, что ваша идея расширения - лучший (хотя и некрасивый) компромисс. Но скорее изменение масштаба, небольшая мутация страницы (или DOM) может быть лучшим решением. Попробуйте, например, добавить невидимый (или почти такой) элемент с низким z-порядком. Вам также нужно будет контролировать мутацию, чтобы это происходило только 1 раз в секунду или даже реже.

AlienRancher
источник
1
Нарушение доступности, когда это явно задано в конфигурации или параметрах, во имя простой прокрутки кажется плохим.
Мануэль
1
@ Manuell, поэтому расширения существуют. Когда ваши приоритеты идут вразрез с приоритетами браузера, вы можете взять их на себя. Ваш клиент, устанавливающий дополнительный сигнал, соглашается с вами, а не с командой Chrome.
AlienRancher
-1

Многопроцессная архитектура Chrome отличается от архитектуры любого другого браузера. В целях безопасности основной интерфейс браузера находится в одном процессе, а веб-страницы запускаются в отдельных процессах визуализации (обычно по одному на вкладку). Процессы рендерера - единственные, которые представляют DOM веб-страницы и, следовательно, всю информацию о доступности, но процессам рендеринга специально не разрешается взаимодействовать с операционной системой (отправка или получение событий или сообщений) - в частности, рендерера процессы не могут отправлять или получать события доступности.

Ребекка Райт
источник