2010-09-14 18 views
1

J'ai écrit un plugin NPAPI qui, si je le place dans% ProgramFiles \ Mozilla FireFox \ plugins, instancie et s'exécute correctement. Cependant, comme je souhaite que cela fonctionne aussi avec d'autres navigateurs, je préférerais l'enregistrer dans HKLM \ Software \ MozillaPlugins \, comme décrit here. Donc, dans mon installateur, je crée ces entrées de Registre:Impossible d'obtenir le plugin NPAPI répertorié dans HKLM Software MozillaPlugins pour instancier

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

"ProductName" = "WINVNC NPAPI Control"

« Chemin "=" 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" = "VNC du serveur Alanta NPAPI Plugin"

Et, bien sûr, mon installateur met le fichier en WinVncCtl.dll l'endroit correct. (J'ai aussi essayé de le renommer en npWinVnc.dll, avec la théorie que peut-être il faut commencer par "np", sans dés.J'ai aussi essayé différentes combinaisons de balises de version, types MIME, etc.)

Je suis instancier comme ceci:

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

Mais il ne semble pas instancier cette façon. Cependant, comme mentionné ci-dessus, si je laisse de côté le classid dans l'étiquette d'objet, et placez simplement le fichier npWinVnc.dll dans mon répertoire de plugins, la vie est bonne.

Avez-vous des idées sur ce qui pourrait mal tourner avec mon approche?

Répondre

2

Donc, je n'ai pas réussi à le faire fonctionner comme les docs le disent. Mais cette combinaison particulière semble réussir:

(1) Le nom du fichier a apparemment pour commencer « np », donc je renommé à « npWinVnc.dll », et ajusté les entrées de Registre appropriée:

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

"ProductName" = "WINVNC NPAPI Control"

"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 « = » VNC de Alanta serveur NPAPI Plugin »

Je savais que les fichiers dans le répertoire plugins nécessaires pour commencer par « np », mais apparemment, il est également nécessaire pour les fichiers enregistrés directement à commencer par « np » aussi bien. Cela semble être une foutue (et sans papiers!) exigence pour moi, mais c'est apparemment comme ça.

(2) Si vous spécifiez un ID de classe dans la balise <objet> (même si vous spécifiez également un type MIME), cela ne semble pas fonctionner, vous devez donc simplement spécifier un type MIME, comme ceci:

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

Cette combinaison particulière a fonctionné pour moi. Je préférerais utiliser le ClassID, car il désambiguïserait entre les DLL dans le répertoire plugins et les DLL qui ont été placées par le programme d'installation, mais ce n'est pas critique. Je suis toujours ouvert aux suggestions quant à pourquoi le ClassId ne fonctionne pas, cependant. (J'ai essayé de regarder à travers le code source de Mozilla, mais j'ai décidé que mon temps pourrait être mieux passé quelque part autour de la ligne 1000 de nsObjectFrame.cpp :-(.)

2

Pour ce que vous faites, vous pouvez également vouloir au moins regardez le code source FireBreath, il y a beaucoup de bons exemples et le framework est génial (confession: je l'ai écrit) par lui-même, mais il est open source et vous pouvez l'utiliser comme vous le souhaitez.