UIオートメーションでのGoogle Chromeのアクセス可能なツリーキャッシュの問題


154

ユーザーがブラウザで下にスクロールしても、Google Chromeはユーザー補助要素(AutomationElement)を更新しません。

それを再現するには:

  1. を使用して、"chrome --force-render-accessibility"またはでグローバルアクセシビリティを設定して、レンダラーのアクセシビリティを有効にします "chrome://accessibility"
  2. 行くhttp://en.wikipedia.org/wiki/Google
  3. (Windowsキットの)UIオートメーションモードでinspect.exeを開き、「関連記事へのリンク」要素を探します。
  4. Chromeに戻り、下部にある[関連記事へのリンク]が表示されるまで下にスクロールします
  5. 「関連記事へのリンク」要素が画面外にマークされている

Chromeに強制的に更新させる手動の解決策をいくつか見つけました。

  1. ズームを90%に設定してから100%に戻します(非常に醜い方法です)
  2. アクセシビリティをオフにしてからオンに切り替える chrome://accessibility/

私が探しているのは、これらの操作の1つをプログラムで実行する機能、またはChromeにキャッシュツリーを更新させる操作です。


私が試したこと:

  • ウィンドウのサイズを変更 PInvoke/MoveWindow
  • ウィンドウを再描画 PInvoke/Redrawwindow
  • クロム拡張機能を作成し、オンデマンドでズームを100%に強制します:(chrome.tabs.setZoom(null, 0);機能しますが、点滅してウィンドウが遅くなります)

これらはどれも正しく機能していません。

編集:Windows 7でGoogle Chrome 40.XX、41.XX、42.XX、43.XX、44.XX、45.XX、46.XX、47.XX.Dev、48.XX.Devでテスト済み。


13
:あなたは、Windows上のクロムのアクセシビリティのバグにこれを報告しなければならないcode.google.com/p/chromium/issues/...
サイモンMourier

5
問題を解決したら、何をしようとしているかに関する情報を共有できますか?多分回避策があるかもしれません...
DoronG

@ Ksv3n投稿したバグへのリンクを投稿してください
Mauricio Gracia Gutierrez

@ Ksv3n他のブラウザで同じテストを試しましたか?Firefoxはそうかもしれませんか?
PseudoAj 2015年

@Emzorは編集を試みてくれてありがとうございますが、リンクを「より良く」見えるようにするために簡単な編集を行うことは控えてください。必要に応じてユーザーがリンクをコピーして貼り付けることができるように、リンクが完全に表示されることがあります。
gitsitgo 2016年

回答:


1

単純なページでのスクロールは、レンダラーからの計算を必要としないように最適化されています。スクロールに必要なのはコンポジターとGPUだけなので、レンダラーからのみ更新されるレンダーツリーは同じです。

スクロールの実行中にレンダラーがDOMをトラバースし、アクセシビリティツリーを更新するように要求することは、特にタッチデバイスの場合、スムーズなスクロールを実現するための数年の努力とは対照的であり、バグの修正に引っ張られることはないと思います。

私が思う拡張機能のあなたのアイデアは(醜いですが)最良の妥協です。しかし、ズームを変更するのではなく、ページ(またはDOM)の小さな変更を行う方が良い解決策になる場合があります。たとえば、Zオーダーの低い非表示(またはそれに近い)要素を追加してみます。また、突然変異をレート​​制御して、毎秒1回またはそれ以下の頻度で発生するようにする必要もあります。


1
設定やパラメータで明示的に要求されたときにアクセシビリティを壊すことは、スムーズなスクロールという名目で悪いようです。
manuell 2016年

1
@manuellが拡張機能が存在する理由です。ブラウザの優先度に反して優先度が実行されると、引き継ぐことができます。拡張機能をインストールする顧客は、Chromeチームではなくあなたに同意することを知らせます。
AlienRancher

-1

Chromeのマルチプロセスアーキテクチャは、他のブラウザのアーキテクチャとは異なります。セキュリティのために、メインのブラウザーUIは1つのプロセスにあり、Webページは別々のレンダラープロセスで実行されます(通常、タブごとに1つ)。レンダラープロセスは、WebページのDOMの表現、したがってすべてのアクセシビリティ情報を持つ唯一のプロセスですが、レンダラープロセスは、オペレーティングシステム(イベントまたはメッセージの送信または受信)との対話を特に許可されていません-特に、レンダラープロセスは、アクセシビリティイベントを送受信できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.