WindowsのアクセシビリティAPIのキャレット(カーソル)座標更新イベントが正しく発行されない



  • Vivaldi 1.14.1077.55にて、Win32のアクセシビリティAPIであるMSAA(Microsoft Active Accessibility) APIを用いたカーソル座標の取得が正しく動作していませんのでご報告します。

    APIに反応するものの、アプリケーション側から見ると不正確な動きが返ってくるように見えており、結果正しくない動作になってしまっています。(詳細は後述)
    (参考までに、Google Chromeや、MicrosoftのIEでは正常に動作しています)

    本APIは拙作のフリーソフト「SKK日本語入力FEP」のカーソル表示で使用しています。この座標取得は、JavaScriptの制御が入らないForm上では問題ないのですが、Twitterなどの制御つきの入力欄では正しく表示が行なわれない現象として現れます。
    (こちらも、前述のようにGoogle ChromeやIEであれば正しく動作しています)

    問題を再現するためのサンプルプログラムを用意しました。
    http://coexe.web.fc2.com/msaa.html

    ■再現手順
    上記URLよりZIP書庫をダウンロード後、任意のフォルダに展開し、exeファイルをダブルクリックして実行してください。
    実行するとMSAAを用いてカーソル座標に矩形が表示されます。コンソール上にはAPIの取得内容が表示されます。コンソール内でCTRL+Cを入力すると終了します。

    この状態でVivaldiやGoogle Chrome等を起動し、HTMLのフォーム内で文字を入力したりカーソルキーを押してカーソルの移動を行った時の反応を比較していただければ一目瞭然だと思います。

    ・IEやGoogle Chromeなど正常に動作するブラウザの挙動
    →カーソルを動かすと、カーソル移動のイベントのみが正確に発生する。

    ・Vivaldiの場合
    →カーソルを動かすと、移動のイベントだけでなく消去のイベントまで発生しており、しかも移動と消去がランダムな順序で発生するため点滅して動くようなおかしな動きになってしまう。

    詳細はソースコードを参照してください。



  • Windows 10 Pro 64bit上で以下のブラウザでテストツールを実行した場合と

    • Chrome (正常)
    • IE (正常)
    • Vivaldi (エラー)

    Windows 7 Ultimate SP1 32bit上でテストツールを実行した場合の

    • Vivaldi (エラー)

    スクリーンショットを参考に載せておきます。

    ランダムな順序でカーソルOFFが発生してしまうのは、Vivaldiに対してMSAA APIが時々エラーで失敗してしまう(Vivaldi側の実装に何らかの問題がある)可能性が高いと考えています。

    Win10 64bit / Google Chrome 65.0.3325.181: Success
    0_1521993557924_Win10 Pro 64bit Chrome.png

    Win10 64bit / IE 11.309.16299.0: Success
    0_1521993580885_Win10 Pro 64bit IE.png

    Win10 64bit / Vivaldi 1.14.1077.60: Failed
    0_1521993673521_Win10 Pro 64bit Vivaldi.png

    Win7 32bit / Vivaldi 1.14.1077.60: Failed
    0_1521993721643_Win7 Ult SP1 32bit Vivaldi.png

    この画像だけでもどうか開発者の目に届きますよう……


  • Community Manager

    @coexe ご報告や緻密な再現手順をご用意いただき、ありがとうございます!こちらでも検証してみます。


  • Community Manager

    @coexe 本件、1.15では正常な動きを確認しているのですが、念のため実際にお手元でも確認いただくことは可能でしょうか。
    https://jp.vivaldi.net/2018/04/25/vivaldi-1-15-stable/


Log in to reply
 

Looks like your connection to Vivaldi Forum was lost, please wait while we try to reconnect.