2010-09-14 11 views
1

我写了一个NPAPI插件,如果我把它的%ProgramFiles \ Mozilla Firefox的\插件,实例化和正常运行NPAPI插件。但是,因为我想它与其他浏览器,以及,我更倾向于将在HKLM \ SOFTWARE \ MozillaPlugins \注册它,如所描述here。所以在我安装,我创建这些注册表项:不能得到HKLM SOFTWARE MozillaPlugins 上市实例

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

“产品名称”= “WinVNC的NPAPI控制”

“路径“=” C:\ Program Files文件\ Alanta \ WinVncCtl.dll”

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

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @alanta。 COM/WinVncCtl \ MIMETYPES \应用程序/ x-alanta-VNC]

“说明”= “Alanta的VNC服务器NPAPI插件”

,当然,我的安装程序将在WinVncCtl.dll文件正确的地方。 (我也尝试过重命名为npWinVnc.dll,这个理论下,也许它需要开始与“NP”,没有骰子。我也试过版本标签,MIME类型等的不同组合)

我实例化它像这样:

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

但它似乎并没有实例化的方式。但是,如上所述,如果我忽略对象标记中的classid,并将文件npWinVnc.dll放在我的插件目录中,那么生活就会很好。

什么可能错了我的方法来去有什么想法?

回答

2

所以我一直没能得到它的工作,该文档说应该的方式。但这种特定组合似乎是成功的:

(1)文件名称显然已经开始与“NP”,所以我改名为“npWinVnc.dll”,并调整了注册表项正确:

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

“产品名称”= “的WinVNC NPAPI控制”

“路径”= “C:\ Program Files文件\ Alanta \ npWinVnc.dll”

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

[HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ alanta.com/WinVncCtl \ MIMETYPES \应用程序/ x-alanta-VNC]

“说明“=” Alanta的VNC服务器NPAPI插件”

我知道,在plugins目录中的文件需要用启动‘NP’,但显然这还需要直接登记到启动文件‘NP’为好。这似乎是一个棘手的(和无证件!)对我的要求,但显然是这样。 (2)如果您在<对象>标记中指定ClassId(即使您还指定了MIME类型),它似乎也不起作用,所以您只需指定一个MIME类型,如下所示:

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

这个特定的组合让它为我工作。我更喜欢使用ClassID,因为它会消除插件目录中的DLL和安装程序放置的DLL之间的歧义,但这并不重要。尽管如此,我仍然乐于接受为什么ClassId不起作用的建议。 (我试图通过Mozilla源代码查看,但决定我的时间可能会更好地用在nsObjectFrame.cpp的第1000行左右:-)

2

对于你在做什么,你可能还想至少看看FireBreath的源代码;这里有很多很好的例子,框架非常棒(坦白地说,我自己写的),但是它是开源的,你可以随心所欲地使用它。

相关问题