5

古い Mozilla NPRuntime の例をベースとして使用して、小さな NPAPI プラグインを作成しました。私の問題は、Firefox と Safari (Windows) では問題なく動作しますが、Google Chrome では動作しないことです。

about:plugins でプラグインを確認できます。テスト ページを開くと、Chrome がプラグインを実行するための新しいプロセスを起動していることがわかります。プラグイン プロセスはエラー ダイアログなしで 10 秒以内に終了します。10 秒間、プロセスは実行中ですが、スクリプト可能なプラグイン オブジェクトへのアクセスは機能しません (Firefox または Safari を使用している場合は正常に機能します)。

Chrome が 10 秒後にプラグイン プロセスを強制終了する原因となるアイデアはありますか? プラグインにアクセスしなくても強制終了するため、初期化に関連するものである必要があります。

4

2 に答える 2

15

確かなことは言えませんが、 --plugin-startup-dialog コマンド ライン パラメーターを使用して、Chrome がプラグインをロードしたときに同じプロセスでアラートをポップアップさせることができます。その後、デバッガーをそのプロセスにアタッチし、うまくいけばエラーをキャッチできます。

FireBreathは Chrome で正常に動作するため、比較のためにFireBreathを調べて、初期化コードに大きな違いがあるかどうかを確認できます。ただし、デバッガーを接続し、クラッシュするまでコードをステップ実行することをお勧めします。NPP_New、NPP_Destroy、および NPP_SetWindow の各エントリポイントにブレークポイントを設定し、何が起こるかを確認します。

別のオプションは、ソースから Chromium をビルドしてみることです (とてつもなく難しくはありませんが、時間がかかります)。そうすれば、動作を停止した場所までの完全なスタック トレースを取得できます。

幸運を!

于 2009-12-26T06:26:53.177 に答える
5

Taxilianのヒントのおかげで、初期化シーケンスをデバッグでき、ChromeがプラグインのNP_Initialize()を呼び出しているときに、サンプルプラグインがエラーを返していることがわかりました。サンプルプラグインには、プラグインのコンパイルで使用されるNPNetscapeFuncs構造体定義が、少なくともブラウザーによって提供されるものと同じサイズであることを確認するためのチェックがありました。Chromeは、npapi.hとnpruntime.hを取得していた最新のMozilla XULRunnerSDKのバージョン22よりも当然小さい構造のバージョン19を使用しているようです。

于 2009-12-26T13:23:57.793 に答える