我的玻璃盒子

【原创】我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime

前几天一直在忙乎着研究和阅读XUL和FF的Extension相关资料,今天突然发现,我要做得事情似乎不是用Extension来实现的。因为原来的应用是一个ActiveX,网页会将一些参数通过ActiveX控件传递进来,而ActiveX接到这些参数以后,会和服务器进行一些数据交互,最后调起本地的执行程序。似乎我走了一些弯路,方向不对。我要做得事情应该是编写一个Plugin,而非Extension。

及时修正了下一步的研究计划,那么就让我们先来编译和测试Mozilla提供的一个小例子吧。原文连接在这里:

https://developer.mozilla.org/En/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio。文章中是以VS2003举例,我这里以VC6来进行测试,并且将步骤中需要注意的地方特别说明了一下。

1、先到这里下载相关源码:http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/。不知道为什么Mozilla只提供了页面形式,没有打个包,害得我得一个个文件下载和保存,郁闷。

2、在VC6中新建一个Win32 Dynamic-Link Library工程,取名“nprt”。注意:建议工程以小写np开头,并且长度不超过8个字符,这样以后就会省事很多。

3、下一步,选择“An empty DLL project”,然后“Finish”。

4、将刚才下载的源码添加到工程中来。test.html不用添加,nprt.def建议也添加进来。

5、现在还不能编译,否则会出很多错误。打开Project Settings,转到C/C++标签页,在Category中选择Preprocessor,在Preprocessor Definitions中最后面添加:,XP_WIN32,MOZILLA_STRICT_API,XPCOM_GLUE,XP_WIN,_X86_。注:如果你使用VS 2005,需要添加全部的定义:WIN32;_WINDOWS;NPRT_EXPORTS;XP_WIN32;MOZILLA_STRICT_API;XPCOM_GLUE;XP_WIN;_X86_

6、在Additional include directories下面添加XULRunner SDK的include路径,可以是绝对路径,也可以是相对路径,看你当初怎么解压的了。例如:..\..\xulrunner-sdk\include

7、在Category中选择Precompiled Headers,选择Not using precompiled headers,OK,关闭Project Settings对话框。打开npp_gate.cpp,将下面的代码注释掉:
jref NPP_GetJavaClass (void)
{
  return NULL;
}

8、编译!……我靠,有错:Fatal error C1083: Cannot open include file: 'npapi.h': No such file or directory。我可是严格按照教程上面写的去做得啊。

9、在xulrunner-sdk目录下搜索了一下npapi.h,原来在xulrunner-sdk\sdk\include下面,这好办,多加一条包含路径不就欧了?仿照第6步,添加该目录;

10、编译!OK,过了。

11、到输出目录下将nprt.dll复制到FF安装目录的plugins目录下,例如:C:\Program Files\Mozilla Firefox\plugins\

12、如果此时FF开着也没关系,不用关(这点很不错)。在地址栏键入about:plugins,看看是不是有一个npruntime scriptable example plugin,如果有,那就表示欧了,FF认出了我们的插件;

13、在FF中打开test.html,嗯?怎么还提示安装缺失插件?用EditPlus打开test.html,噢,原来有这么一句:<embed type="application/x-java-mozilla-npruntime-scriptable-plugin" style="display: block; width: 50%; height: 100px;">。因为我们刚才没有添加名字为x-java-mozilla-npruntime-scriptable-plugin的插件,所以当然认不出来啦。

14、随便点一下页面上的按钮,看看简单的交互行为。

 

OK,第一个例子还算顺利,比想象中的要顺利。下面就该研究一下代码了,看看FF的插件和ActiveX的区别到底有多大。

附一些参考资料:
http://xinsync.xju.edu.cn/index.php/archives/2124
http://mqjing.blogspot.com/2008/09/plugin-firefox-plugin.html

posted on 2008-11-11 15:47 深蓝色系统 阅读(19375) 评论(17)  编辑 收藏 引用 所属分类: Firefox开发

评论

# re: 我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-03-30 16:41 andornotok

首先谢谢您的文章!
我有些疑问想请教您
在你提到的步骤13里面,x-java-mozilla-npruntime-scriptable-plugin这个插件,你是怎么处理的!

期待您的回复  回复  更多评论   

# re: 我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-05-28 22:05 张山

无法解析的外部符号 _NPN_ReleaseVariantValue
不知道这个错误如何解决?谢谢了!  回复  更多评论   

# re: 我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-07-31 16:57 晓静

你好,按照你开发插件过程,我跟随操作了一遍,但到12步后,在已安装插件中没看到x-java-mozilla-npruntime-scriptable-plugin的插件  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-09-19 02:17 suntofly

https://developer.mozilla.org/En/Developer_Guide/Build_Instructions

开发指导里面讲了, 你可以有四种方式download代码, 我用了cvs:
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/c
vsroot co mozilla/modules/plugin/samples

你看到的页面是为了方便查阅最新版本源代码的页面.... 你不会一个一个拷贝下来,然后去掉乱七八糟的字符再存成文件的吧.. ^^!! 勤劳的兄弟... 汗两个!!

我还打了这么多字,O M God, 我也很勤劳的!!!   回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-10-20 11:09 fallingstone

有没有试过在Gecko1.9.1下面编译,少了头文件  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-10-20 12:09 tt

# re: 我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-07-31 16:57 晓静
你好,按照你开发插件过程,我跟随操作了一遍,但到12步后,在已安装插件中没看到x-java-mozilla-npruntime-scriptable-plugin的插件 回复 更多评论
===================================
在页面中把这个控件去掉
  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-11-11 11:16 lion

我按照不步骤一步步的操作之后终于编译成功并且在firefox中成功找到了插件,但是当我点击按钮测试的时候却造成了浏览器的崩溃。。似乎bar方法可以成功调用但是调用foo方法的时候就崩溃,这是怎么回事呢,真诚期待您的回答!  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-11-13 16:03 白开水

@lion

看这贴,plugin.cpp中有个地方内存分配时用了strdup:
http://www.firefox.net.cn/forum/viewtopic.php?t=27374  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2009-11-27 16:19 老U

请问 怎么添加名字为: x-java-mozilla-npruntime-scriptable-plugin的插件  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2010-07-19 16:10 NPPlugIn

你好,我用的是xp3,vs2005,xulrunner-sdk1.9.2,按照你给出的步骤进行编译时,出现很多error  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2011-06-07 20:04 erxiao

同样做的,出现下面的错
> c:\gecko-sdk\np_plugin\nprt\npn_gate.cpp(313): error C2039:
> 'construct' : is not a member of '_NPNetscapeFuncs'
> c:\gecko-sdk\np_plugin\nprt\npn_gate.cpp(307): error C2039:
> 'enumerate' : is not a member of '_NPNetscapeFuncs'
> c:\gecko-sdk\np_plugin\nprt\plugin.cpp(323): error C2065:
> 'NP_CLASS_STRUCT_VERSION_CTOR' : undeclared identifier
> c:\gecko-sdk\np_plugin\nprt\plugin.cpp(323): error C2078: too many
> initializers
> c:\gecko-sdk\np_plugin\nprt\plugin.cpp(365): error C2078: too many
> initializers  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2011-06-09 14:52 erxiao

编译过了,但是,似乎没有交互行为,调用插件里的函数没有成功  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime[未登录] 2011-11-25 14:38 wang

交互后的效果是怎样的,而且不明白那个html文件有什么作用  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2011-11-29 03:20 eeminghsiong

恢复  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime[未登录] 2011-12-04 00:25 小桥流水

顶一下,写了个批量下载mxr.mozilla.org上代码的小工具。
下载地址:http://smallbridge.sinaapp.com/124137/%E4%B8%8B%E8%BD%BDmxr-mozilla-org%E4%B8%8A%E7%9A%84%E4%BB%A3%E7%A0%81.html  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2012-10-06 14:38 zxciop110

看到这里 晕了 原来之前的都白做了 呵呵 算是学习了吧  回复  更多评论   

# re: 【原创】我的Firefox插件开发之旅(5)&mdash;&mdash;编译和测试第一个Plugin例子:npruntime 2013-09-16 09:23 left

您好,我最近在研究火狐的插件,我从官网下载的npruntime例子的无法实现交互,希望可以向您请教,我的qq:515015025,望您赐教,万分感谢  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2016年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(75)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜