第一次开发组件,随便起了个名字,结果悲剧了,一直没看到被加载,幸好看到别人的帖子,转给大家
引用“
Firefox plugins开发的众多奇怪的约定(假设plugins已经被正确安装)
有些约定非常奇怪,不要问我为什么,天晓得开发firefox的牛人们怎么想的。
在Windows下,plugins必须满足以下条件才能被firefox检测到:
- 插件的名字必须是np*.dll,也就是必须以np开头,.dll结尾
- 插件dll资源的语言必须为LANG_ENGLISH,code page必须为1252。在rc文件里是这么写的:
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
- 插件dll的VERSION_INFO里面必须包含以下值:
VALUE "MIMEType", "application/x-your-mimetype" (最后面的mimetype也不是固定的)
这个MIME就是<object>标签引用插件的唯一凭证。
在Linux下,plugins必须满足以下条件才能被检测到:
- 插件的名字必须是lib*plugin.so,即以lib开头,plugin.so结尾
- 插件必须实现NP_GetMIMEDescription和NP_GetPluginVersion,并返回合适MIME字符串。注意,这个字符串并不是普通的MIME,是有特殊规则的,详见前面这个链接的内容。
- 插件so不要静态链接gtk、opensll、pthread、z等系统库,这会在不同linux平台上因为符号表的问题遇到各种运行时错误
特别需要说明的是,NP_GetPluginVersion、NP_GetEntryPoints等关键函数没有任何官方文档介绍它们,只能根据例子来猜,反正没事就别改它们的实现,copy例子中的代码就好。“