Firefox Plugin 开发

一、环境搭建
1、Gecko-SDK
Firefox是Mozilla基金会主持的、支持多种主流平台的、和Netscape一脉相承的浏览器,内核名字叫Gecko。开发插件前,你首先应该到Mozilla Plugins去了解一下,那里是标准和权威的所在,既有文档,有又例子,关键的是还有一个开发插件必不可少的Gecko-SDK供你下载,这里我主要讨论Windows版的,Linux版的用GNU GCC编译。
2、VC++ 6
Windows版的要用VC编译,MinGW是不行的,这一点我反复尝试都不行,因为那个SDK就是MSVC版的。我这里用的是VC 6+Sp6。
这样环境就搭好了,可以着手编译一个现成的例子了, 推荐你先拿npruntime试试牛刀,具体环节可以参照How-To for Visual Studio,搞不好的话晚饭就不要吃了。
二、Plugin的运行机理
假设当Web页上有这样一段Embed代码:
Firefox解读到这个Embed时,就会在当前Plugins中寻找一个支持该mime-type值即application/x-xxx-xxxx 的插件来执行。每一个插件都是一个动态连接库。在Windows平台上,插件动态库文件的位置必须位于Firefox主程序的plugins目录中,动态连接库的名字必须是严格的8.3制,即文件名最长8个字符,不含扩展名“dll”,并且以np开头(大小写均可)。合格的插件名字如nprt.dll。
为了让Firefox知道nprt.dll所支持的mime-type,要在dll文件的描述信息中增加MIMEType和FileExtens段。在UNIX平台上,动态库要提供特定的调用函数入口来提供等价信息。
确定了所属dll后,如果尚未使用,Firefox就装载该动态库,然后定位NP_Initialize入口点并调用之,使dll初始化。
然后调用NPP_New,针对该Embed对象创造一个Plugin实例。
当Embed对象消失时,Firefox调用NPP_Destroy摧毁Plugin实例。当dll不再需要时,Firefox调用NP_Shutdown使dll释放自己。
三、调试与输出
Firefox输出调试信息很方便,启动时以firefox.exe -console,这样,程序里的printf()语句的输出即可顺利的显示在console窗口内。不过要记得正式Release时把printf()语句略掉,这一点可以用宏简单的作到。
为了免去每次输入命令行的麻烦,可以做一个firefox.exe的快捷方式,然后右击它,在目标框里追加上” -console file:///e:/nprt/test.html”,然后OK,这样就可以双击这个快捷方式直接以console方式打开测试页了。
四、关于Scriptability
何谓Scriptability?就是Plugin实例可以作为一个脚本对象供外部访问,反之,Plugin实例也可通过接口访问外部脚本。
Netscape 时代的Scripting技术就是LiveConnect是基于Java的,当时还没有JNI,Netscape自己搞了一个JRI(不知当时的 Netscape是否是内置了JVM的,因为没有JVM支持的话,页面脚本也是无从执行的),后来Sun主推了JNI,JRI就废弃了。Mozilla只好又联合若干家相关Vendors搞了一套新的Scripting技术。相当好,独立于Java,简洁实惠。
能与脚本互访,插件的灵活性和实用性大为提高。
Tags: 

延伸阅读

最新评论

发表评论