4

編集:賞金に加えて、Firefox/Geckoコードベースでこのバグを修正するために$250を支払う用意があります。これは、問題を再現する簡単なテストプロジェクト(Visual Studio 2008 C#)です。

編集#2このバグを修正するために600ドルを支払う用意があります。問題を再現するサンプルプロジェクトについては、上記を参照してください。

HTMLを表示するためのFirefox(Gecko)ActiveXコントロールがC#Windowsフォームにあります。

このFirefoxActiveXコントロールがフォーム上にある場合、キーを押したときの約2〜3%が成功しません。むしろ、別のWindowsメッセージが送信されます。

Tabキーを押したままにして、3つの通常のWinFormsテキストボックスをタブで移動します。97%の確率で正しく動作します。Spy ++は、WM_KEYDOWNメッセージが正しく送信されたことを通知します。

通常の動作http://judahhimango.com/images/normaltab.jpg

しかし、ランダムに、おそらく2〜3%の確率で、タブキー(または他のキー)が正しく処理されません。Spy ++は、代わりにWM_CHARが送信されていることを通知します。

奇妙な振る舞いhttp://judahhimango.com/images/screwytab.png

奇妙な動作が発生すると、キーがまったく処理されないか、正しく処理されません(タブ文字をサポートしていないテキストボックスに「\t」文字を挿入するなど)。

これは、FirefoxActiveXコントロールがフォーム上にある場合にのみ発生します。

私たちの質問は:Firefox / Geckoエンジンは、これらの副作用を引き起こす可能性のあるある種のキーボードフックをインストールしますか?または、さらに良いことに、この問題をどのように修正しますか?

4

4 に答える 4

2

WM_CHARメッセージはTranslateMessage呼び出しによって生成されるため、探し始めるのに適した場所は、GeckoソースコードのTranslateMessage呼び出しです。

最初のサンプルコードでは、関数が2つのライブラリ(mozctl.dllとxul.dll)によってのみインポートされます。GeckoFXでも同じエラーが発生すると主張しているので、mozctl.dllを方程式から外すことができます。これでxul.dllが残るので、Geckoのソースコードを考えると、を調べることをお勧めしますwidget\src\windows\nsToolkit.cpp。エンジンが埋め込まれている場合にコードが実行されるかどうかはわかりませんが、実行される場合、ライブラリはまったく新しいメッセージポンプを別のスレッドで開始します。

残念ながら、自分のマシン(MozillaActiveXコントロールがインストールされていないWindows7 x64)でコードを実行またはコンパイルできないため、デバッガーでこれを確認できません。それが誰かがそれをさらに追跡するのに役立つことを願っています。

于 2009-08-18T07:08:46.977 に答える
1

根本的な問題は、Mozillaが別のアプリケーションに組み込まれている場合、内部イベントをディスパッチするときにWindowsメッセージを誤ってポンピングすることです。Mozillaは、イベントシステムを使用して、スレッド間で調整したり、スレッドでの遅延処理をスケジュールしたりします(nsIThreadnsIEventTargetを参照)。たとえば、アクティブなXMLHTTPRequestが多数あるWebページを埋め込む場合、Mozillaはイベントディスパッチインターフェイスを使用してイベントをjavascriptにディスパッチし、副作用としてWindowsメッセージを送り返します。Mozillaイベントが完全にディスパッチされると、メインイベントループに戻ります。

MozillaがWindowsメッセージをポンピングする場合、アプリケーションのイベントループによって実行される追加の処理は含まれません。Mozillaがこの状態になると、IsDialogMessage()、TranslateMessage()、PreTranslateMessage()、またはその他の前処理はスキップされます。したがって、症状には、ダイアログナビゲーションに使用される代わりに文字として挿入されるタブキーの押下、散発的に無視されるキーボードホットキー、または散発的にスキップされるカスタムメッセージの前処理が含まれます。たとえば、Outlook 2007/2010の「作成」画面は、キーボード入力を処理するためにカスタムメッセージの前処理に依存しているため、散発的にキーストロークを失います。

この問題に対処するパッチについては、https://bugzilla.mozilla.org/show_bug.cgi?id=582790を参照してください。

于 2010-07-28T23:21:40.940 に答える
1

SnoopFreeとPSMAnti-Keyloggerを持っています。そのうちの1つは、Firefoxがキーボードフックをインストールしようとしていることを検出しました。Mozilla/Firefoxファイルxul.dllがキーボードフックにインストールしようとします。拒否された。

于 2010-08-25T16:05:41.253 に答える
0

相互運用性のすべてを自分で実装していることに気づきました。GeckoFXプロジェクトでこれを試して、同じエラーが発生するかどうかを確認できますか?私はこのプロジェクトを仕事で使用していますが、まだ問題は発生していません。

于 2009-07-16T02:10:52.777 に答える