使用FireBreath写浏览器插件(三)

来源:互联网 发布:中国gdp数据分析 编辑:程序博客网 时间:2024/04/30 18:54

三. FireBreath Helloworld


首先需要创建一个自己插件的工程,首先要安装Python,然后进入命令行后,在Firebreath的源代码目录下执行:python fbgen.py,这是将提示输入一些信息:


Plugin Name:插件的名称,后面生成的dll将用np+这个名字的方式


Plugin Identifier:插件友好的名字,生成的入口cpp文件将会为这个名字


Plugin Prefix:前缀,主要用于visual studio工程


Plugin Mime type:这个比较重要,NPAPI接口的浏览器使用这个标志插件,网页中创建插件时要用。例如网页中创建flash的代码:


<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="movie_name" align="middle">    <param name="movie" value="movie_name.swf"/>    <!--[if !IE]>-->    <object type="application/x-shockwave-flash" data="movie_name.swf" width="550" height="400">        <param name="movie" value="movie_name.swf"/>    <!--<![endif]-->        <a href="http://www.adobe.com/go/getflash">            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/>        </a>    <!--[if !IE]>-->    </object>    <!--<![endif]--></object>


其中type="application/x-shockwave-flash"的application/x-shockwave-flash就是flash插件的mimePlugin Description:插件的描述信息,会生成在dll的属性里面Plugin has no UI:插件是否有UICompany Name:开发插件的公司名字CompanyIdentifier:公司标志Company Domain:公司的域名,主要是firefox浏览器需要完成后,会在projects生成对应的工程文件,其中有cpp和h文件,也有一个PluginConfig.cmake文件,这是一个cmake脚本。cmake是一个跨平台的编译工具。在windows上,cmake可以转换为vs工程后再编译。在windows上,编译插件主要依赖CMake,git和Visual Studio。需要将Python,CMake,git的目录加入到PATH,然后执行prep2005.cmd(如果用vs2008或其它版本的vs,执行对应的prep***.cmd即可)。为了简单,我写了一个bat

set PATH=D:\tools\Python;D:\tools\CMake\bin;D:\tools\Git\bin;%PATH%call "%~dp0\prep2005.cmd"



这之后就可以在build目录下看到一个FireBreath.sln,用vs打开就可以编译了。编译完后在build\bin\插件名\Debug目录下生成一个np****.dll的文件,在命令行执行regsvr32.exe np****.dll就可以注册插件了。


之后就可以用浏览器打开build/projects/插件名/gen/FBControl.htm这个页面来测试插件是否工作正常了。在FBControl.htm我们可以测试echo,事件注册和回调等。


更加详细的过程可以参考http://www.firebreath.org/display/documentation/Creating+a+New+Plugin+Project


Firebreath是使用cmake编译,PluginConfig.cmake是CMakeLists.txt的一个片段。如果想修改了PluginConfig.cmake文件或将三方工程加入编译,可以参考src\libs目录下各个工程的cmake.txt文件。


用Firebreath写插件需要有C++的基础,熟悉STL,对boost有一定的了解(主要是智能指针,bind和function)。


在正式实现插件之前,我们可以先看看np****.dll的导出函数:


 


NP_GetEntryPoints
NP_Initialize
NP_Shutdown
DllCanUnloadNow
DllGetClassObject
DllInstall
DllRegisterServer
DllUnregisterServer


其中NP开头的都是NPAPI浏览器需要的,并且NPAPI规定插件dll或so的名字必须为np开头,否则浏览器不认。Dll开头的是ActiveX插件需要的,也就是COM里面常见的导出函数。下面一节将会对NPAPI和ActiveX做专门的介绍。


原创粉丝点击