1

NPAPIプラグインを作成しました。これを%ProgramFiles \ Mozilla FireFox \ pluginsに配置すると、インスタンス化されて正しく実行されます。ただし、他のブラウザでも動作させたいので、ここで説明するように、HKLM \ Software \MozillaPlugins\に登録することをお勧めします。したがって、インストーラーで、次のレジストリエントリを作成します。

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl]

"ProductName" ="WinVncNPAPIコントロール"

"Path" = "C:\ Program Files \ Alanta \ WinVncCtl.dll"

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl \ MimeTypes]

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl \ MimeTypes \ application / x-alanta-vnc]

"Description"="AlantaのVNCサーバーNPAPIプラグイン"

そしてもちろん、私のインストーラーはWinVncCtl.dllファイルを正しい場所に配置しています。(また、ダイスなしで「np」で始める必要があるかもしれないという理論の下で、名前をnpWinVnc.dllに変更しようとしました。バージョンタグ、MIMEタイプなどのさまざまな組み合わせも試しました。)

私はそれを次のようにインスタンス化しています:

vncDiv.innerHTML = "<object id='vncServerControl' classid='@alanta.com/WinVncCtl' type='application/x-alanta-vnc' />";

しかし、それはそのようにインスタンス化されていないようです。ただし、前述のように、オブジェクトタグのclassidを省略し、プラグインディレクトリにファイルnpWinVnc.dllを配置するだけで、問題は解決します。

私のアプローチで何がうまくいかないのかについて何か考えはありますか?

4

2 に答える 2

2

そのため、ドキュメントに記載されているとおりに機能させることができませんでした。しかし、この特定の組み合わせは成功しているようです。

(1)ファイル名は明らかに「np」で始まる必要があるため、名前を「npWinVnc.dll」に変更し、レジストリエントリを適切に調整しました。

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl]

"ProductName" ="WinVncNPAPIコントロール"

"Path" = "C:\ Program Files \ Alanta \ npWinVnc.dll"

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl \ MimeTypes]

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com / WinVncCtl \ MimeTypes \ application / x-alanta-vnc]

"Description"="AlantaのVNCサーバーNPAPIプラグイン"

プラグインディレクトリ内のファイルは「np」で始まる必要があることは知っていましたが、直接登録されたファイルも「np」で始まる必要があるようです。それは私には厄介な(そして文書化されていない!)要件のように思えますが、明らかにそれはそうです。

(2)<object>タグでClassIdを指定した場合(MIMEタイプも指定した場合でも)、機能していないように見えるため、次のようにMIMEタイプを指定する必要があります。

vncDiv.innerHTML = "<object id='vncServerControl' type='application/x-alanta-vnc' />";

その特定の組み合わせは私のためにそれを機能させました。プラグインディレクトリ内のDLLとインストーラーによって配置されたDLLの間で明確になるため、ClassIDも使用することをお勧めしますが、これは重要ではありません。ただし、ClassIdが機能しない理由についてはまだ提案を受け付けています。(私はMozillaのソースコードを調べてみましたが、nsObjectFrame.cppの1000行目あたりで時間を費やしたほうがよいと判断しました:-(。)

于 2010-09-15T21:43:32.883 に答える
2

あなたがしていることについては、少なくともFireBreathソースコードを見たいと思うかもしれません。そこには良い例がたくさんあり、フレームワーク自体は素晴らしいです(告白:私はそれを書きました)。ただし、これはオープンソースであり、自由に使用できます。

http://firebreath.org

于 2010-10-26T15:25:22.627 に答える