欢迎来到天天文库
浏览记录
ID:37709933
大小:17.24 KB
页数:4页
时间:2019-05-29
《Firefox插件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Firefox插件(plugins)开发实用指南Postedon一22013bywindknife了解Firefox插件的开发知识的时候,找到了这篇文章。的确让我少走了弯路,比如,我的NP插件的DLL,之前不是NP开头的,在此非常感谢原作者,您文章让我节约了不少时间。转载传播此文章,希望对准备研究和学习Firefox插件开发的朋友有所帮助。Firefox插件可实现强大功能,但其中麻烦事情不少。写这个实用指南首先是为了方便自己记忆,免得以后再次栽倒一些坑里面,如果能帮助其他人,则是更好。这个指南不是为了手把手教读者开发插件,而是作为一个FAQ,解决各种诡异问题。Firefox拥有众多的扩展
2、(Extension),开发扩展也非常容易,不过有一些事情还是无法用扩展解决,需要访问操作系统的底层功能,这就需要写插件(plugins)。例如flash就是一个插件而不是扩展。Mozilla提供了一系列的教程和文档,虽然很不详尽,众多重要的API语焉不详,但至少是一个好的开始。最需要阅读的是pluginsAPI和使用入门。这是一个相当长的文档,如果看完所有的内容会花费大量的时间而且还会很晕,这里列一些重点供参考。plugins基础概念写第一个插件(只需要关注WritingPlug-ins这一节所谈到的内容)获得一份firefox的源码,比如firefox3.6。plugins的例子可以
3、在源码里找到(modules/plugin/sdk/samples),如果出了问题还可以自己编译一个debug版的firefox来调试。了解浏览器能提供什么功能制作插件的安装程序,推荐用扩展的方式安装插件,有无数的好处完成以上这些内容以后差不多就已经可以实现自己的插件了,一般而言,参照着例子来做开发不会有什么问题,只是有不少细节需要留意。Firefoxplugins开发的众多奇怪的约定(假设plugins已经被正确安装)有些约定非常奇怪,不要问我为什么,天晓得开发firefox的牛人们怎么想的。在Windows下,plugins必须满足以下条件才能被firefox检测到:插件的名字必须是
4、np*.dll,也就是必须以np开头,.dll结尾插件dll资源的语言必须为LANG_ENGLISH,codepage必须为1252。在rc文件里是这么写的:LANGUAGELANG_ENGLISH,SUBLANG_ENGLISH_US#pragmacode_page(1252)插件dll的VERSION_INFO里面必须包含以下值:VALUE"MIMEType","application/x-your-mimetype"这个MIME就是标签引用插件的唯一凭证。在Linux下,plugins必须满足以下条件才能被检测到:插件的名字必须是lib*plugin.so,即以li
5、b开头,plugin.so结尾插件必须实现NP_GetMIMEDescription和NP_GetPluginVersion,并返回合适MIME字符串。注意,这个字符串并不是普通的MIME,是有特殊规则的,详见前面这个链接的内容。插件so不要静态链接gtk、opensll、pthread、z等系统库,这会在不同linux平台上因为符号表的问题遇到各种运行时错误特别需要说明的是,NP_GetPluginVersion、NP_GetEntryPoints等关键函数没有任何官方文档介绍它们,只能根据例子来猜,反正没事就别改它们的实现,copy例子中的代码就好。firefox插件开发注意事项写f
6、irefox插件的一个基本习惯是,经常编译代码并运行它,保证你的插件还能工作。只要firefox无法加载dll/so,或者加载出现任何错误,都会悄无声息的忽略这个插件。时常关注一下about:plugins,看看插件是不是还在这个列表里。firefox插件从窗口模式上可分为windowless和windowed两种。其中,windowless模式的文档较多较全,是firefox比较推荐的模式,坑比较少,这里就不多说了。windowed模式则相反,需要好好说说。无论在Windows还是Linux上,windowed的插件都拥有独立于浏览器页面的窗口。firefox会通过插件的NPP_Set
7、Window来告诉插件当前窗口的情况。关于windowed插件有两个诡异问题需要注意:Windows平台下,插件窗口默认会响应WM_CTLCOLOREDIT、WM_CTLCOLORLISTBOX、WM_CTLCOLORBTN、WM_CTLCOLORSTATIC消息,并设置一个默认的背景色。这本来没问题,但在WindowsXP下,这个颜色居然永远是黑色,而不是默认系统背景色(通常是白色)。最好subclass这个窗口并且拦截这些消息,
此文档下载收益归作者所有