日期:2014-05-16  浏览次数:20664 次

linux下写一个firefox插件

linux下写一个firefox插件
2011年03月19日
  https://developer.mozilla.org/en/Gecko_SDK 开发包
  http://mirrors.directorymix.com/mozilla/xulrunner/releases/1.9.1.2/sdk/
  Linux 命令行下快速安装Firefox3.0.1
  看到有网友介绍的在 Linux 命令行下只需要复制一条命令,就可以安装好Firefox 3 之后,自己也试了一下,果然很方便,有必要在这里提一下。其实这条命令可以扩展一下,大家只要将命令中Firefox Mozilla FTP 的路径改一下,就可以快速的安装所有版本的Firefox 了(比如这个就是安装最新版的3.0.1的命令):[/b]
  [b]# wget -P ~ftp://ftp.mozilla.org/pub/firefox/releases/3.0.1/linux-i686/zh-CN/firefox-3.0.1.tar.bz2&& tar xjf ~/firefox-3.0.1.tar.bz2 -C ~

  
  ftp://ftp.mozilla.org/pub/firefox/releases
  =======================================[/b]
  [b]

  linux下写一个firefox插件[b][/b]
  相信看到这篇文章的人很明白firefox插件这个概念。不过这里我还是想不厌其烦的再说一下。
  很多人很多地方都混淆了firefox extension和plugin这两个概念。什么是extension,字面意思看就是个扩展,当你安装了个extension后你肯定会在你浏览器的某个地方找到其安装的痕迹,它是对于浏览器功能的扩展,只要你不关浏览器就一直作用着。而plugin则是对某个具体的页面而言。当你页面中声明了一个embed后,浏览器则会在你的browser相应的目录中去找有没有对应的mimetype,有的话则可调用插件里相应的函数,所以插件其实是对网页而言的,只要你不声明你这个网页需要这个插件,那么你不会感到你已经安装有插件的。
  言归正传,这里我想说的是如何在linux下写一个firefox插件,其实很简单,只是因为当自己想去开发时一是本身对linux不够熟悉,二是网上确实缺少相应的资料,所以想把这小小的心得写下来,还请大大们见谅。如果你在windows开发plugin的话,那么本文你可以跳过了,官网有更详细的资料,以及一篇更好的中文版文章,根据这些,我保证你肯定能生成一个简单的dll文件。
  robertleepeak.javaeye.com/blog/348304
  如果你也像我一样对linux不熟悉而摸不着头脑的时候,那么我希望本文对你有用。
  首先,无论你在哪个平台下开发,你都得先去下载相应的sdk开发包
  developer.mozilla.org/en/Gecko_SDK
  下载完之后解压到你喜欢的位置,我这里是root/xulrunner
  之后就去下载官网上的sample代码
  mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/
  这里我们用的是这个npruntime这个程序,你现在要做的就是把这个页面下的所有.cpp和.h文件下载下来。你说.def和.rc呢?很不幸,我也不知道他们是干什么的,但我知道在linux下只要上面这些就够了。
  如果你不会下载的话,就去参考上面那篇文章吧!
  robertleepeak.javaeye.com/blog/348304
  与windows不同的是下面你做的将更为简单。甚至这篇文章只要这一句就够了。
  把你所下的.cpp和.h放到同一目录下,在shell里切换到这个目录,输入
  g++ -I root/xulrunner/include -I root/xulrunner/include/java -Iroot/xulrunner/include/nspr -I root/xulrunner/include/plugin -shared -olibnprt.so np_entry.cpp npp_gate.cpp npn_gate.cpp plugin.cpp
  是不是已经看出来了,这只是个简单的在GNU下编译的命令,并没有特别的要修改的。其实就是这个样子,对于一个程序而言,你所做的只是让它能成功编译而已,至于windows下用IDE所做的那些事情,我是不知道为什么的,我只知道我这个程序就是把所有的cpp文件编译成一个目标文件libnprt.so而已。
  下面就稍微解释下吧。
  g++ GNU的c++编译器,如果是c文件就用gcc
  -I 这个是大写的i 哦,这个参数的作用就是添加编译这个程序所要的外部附加库,所以这里我就把编译这些.cpp的所有需要的include都加了进去
  -shared 编译共享库文件
  -o 定义要生成文件的名字
  最后就是编译这个文件所有的cpp文件了。
  你说编译有错误?同样参考的还是上面那篇文章
  robertleepeak.javaeye.com/blog/348304
  /* 加入