转载请标明是引用于 http://blog.csdn.net/chenyujing1234
一.编译火狐插件:
1.环境搭建:
下载Gecko SDK.。链接地址为:https://developer.mozilla.org/en/gecko_sdk,注意你火狐的版本不能低于Gecko SDK的版本。
2、例子测试
下载火狐插件开发官方例子。链接地址为:
https://developer.mozilla.org/en/Plugins/Samples_and_Test_Cases
该例子包含在unix、mac、windows等几种平开发的例子,总共有4个windows平台不同的例子。
且下载包解压后的 文件夹 GeckoPluginSDK-samples\Win32SDK\gecko-sdk已经含有SDK了。
编译方法有两种:
2、1 重新建工程编译
参考: https://developer.mozilla.org/En/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio
2、2 在原工程基础上编译
我们用VS2005打开Windows平台工程文件AllWin32Samples.dsw:
解决方案是这样:
2、2、1 第一个报错
其中标有红色框的是编译不通过的工程,报错信息为:
1>------ 已启动生成: 项目: npsimple, 配置: Debug Win32 ------
1>Running the XPIDL compiler and linker for nsISimplePlugin
1>FAILED: get_file_length: No such file or directory
1>Project : error PRJ0019: 工具从"Running the XPIDL compiler and linker for nsISimplePlugin"
1>生成日志保存在“file://c:\Documents and Settings\Administrator\桌面\GeckoPluginSDK-samples\Win32SDK\sdk\samples\simple\Debug\BuildLog.htm”
1>npsimple - 1 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
对我来说这个报错重来没见过,网上搜索也没找到原因。因为之前做ATL与COM开发都是用VCMDIL工具来编译的,现在npsimple这个工程是什么来编译的呢?
我把它与ATL工程进行了比较,发现它的解决方案属性里没有MIDL这个属性项:
由于微软件的MIDL属性页有无是根据工程文件是否有以下节点来判断的:
<Tool
Name="VCMIDLTool"
我猜想它是不含这个的。
那么就从工程文件npsimple.vcproj分析入手吧。
在npsimple.vcproj中找到了以下:
从编译信息看,已经运行了 Running the XPIDL compiler and linker for nsISimplePlugin,
那么此报错肯定和xpidl.exe有关系,按着路径找到了此文件:
单独运行也是出错:
很快就在CSDN一博客(http://blog.csdn.net/chinesejimmy/article/details/1634075)上找到了答案:
这个SDK里还需要两个dll文件,下载wintools.zip,从buildtools/windows/bin/x86里拷贝libIDL-0.6.dll、glib-1.2.dll到xulrunner/gecko-sdk/bin下。
2、2、2 第二个报错
这是由于XPIDL.exe编译器不支持源文件的路径中有空格的原因。解决这个问题后,
再编译看看吧!^-^ 通过了!
二、测试例子插件
(1)由于我下的SDK版本是1.8 的,所以去下个FireFox 2.0的浏览器并安装。
(2)到输出目录下将四个工程得到的四个DLL文件:npwinless.dll、npbasic.dll、npscriptable.dll、npsimple.dll复制到FF安装目录的plugins目录下,
例如:C:\Program Files\Mozilla Firefox\plugins\
(3)如果此时FF开着也没关系,不用关(这点很不错)。在地址栏键入about:plugins,看FF认出了我们的插件;
(4) 在FF中打开四个工程对应的test.html ,随便点一下页面上的按钮,看看简单的交互行为。
OK,第一个例子还算顺利,比想象中的要顺利。下面就该研究一下代码了,看看FF的插件和ActiveX的区别到底有多大。