使用NPAPI编写浏览器插件的源码实例


用于种种原因,最近对制作浏览器(chrome,firefox)的插件非常感兴趣
搜了一下,讲的几乎全都是在讲的方法和API,找个简单可以运行的代码实例,还真是难!
不过最终还算幸运,终于找一个例子(http://geeklu.com/2010/10/getting-started-with-npapi-plugin/comment-page-1/).
很遗憾这个例子在我的linux机器上无法正常工作.所以我以此例子为基础写了个新例子,顺路我还写了个chrome的扩展作为演示.
关于NPAPI和chrome的扩展:
NPAPI:
[1] http://colonelpanic.net/2009/05/building-a-firefox-plugin-part-two/
[2] http://rintarou.dyndns.org/2010/04/23/scriptable-plugin-%E6%8E%A2%E8%A8%8E-20090408/
[3] http://blogold.chinaunix.net/u3/94039/showart_2004756.html
[4] https://developer.mozilla.org/en/Plugins

[5] 如何在chrome的扩展中使用:http://code.google.com/chrome/extensions/npapi.html
[6] 如何编写chrome的扩展:http://code.google.com/chrome/extensions/getstarted.html

插件的功能:
提供网页的javascript可以调用本机上的程序的能力,
所以本插件其实是很危险的,当然任何可以让网页调用本机上程序的插件都是很危险的.
不过这里只是一个演示插件编写的例子,看到的人不要惊慌哦...

关于源码的说明
npapi/npapi.h
npapi/npfunctions.h
npapi/npruntime.h
npapi/nptypes.h
直接来自:http://code.google.com/p/npapi-headers/

plugin_exec.c中的一些函数:
char*
NP_GetMIMEDescription()
return的字符串的格式必须是:"text/html:htm,html:HTML Document;application/x-texinfo:tex,texi,texinfo:TexInfo Document;"
详情请看[3]

NPError
NP_GetValue (void *future,
     NPPVariable variable,
     void *value)
一定要处理 variable为NPPVpluginNeedsXEmbed的case,否则chrome不会启用插件(firefox还算正常)

插件的演示方法:
$cp libplugin_exec.so ~/.mozilla/plugins
$firefox wkt.html 
$google-chrome wkt.html ###在网页输入一个命令(必须运行后能跳出窗口,例如gnome-terminal,否则看不见效果),然后点"Run"按钮.
使用NPAPI编写浏览器插件的源码实例 - wkt55555 - wkt的博客
使用NPAPI编写浏览器插件的源码实例 - wkt55555 - wkt的博客
  
chrome扩展的演示方法:
扩展在chrome_extension目录下
加载扩展(加载方法看[6]的第4步),
然后页面上每个link的右键菜单会多出一个菜单项"save link to /tmp/link.log",
点击该菜单项后link的url就会被保存到/tmp/link.log
使用NPAPI编写浏览器插件的源码实例 - wkt55555 - wkt的博客
 
最后特别鸣谢我的室友雷国东,为我提供积极帮助.

本例源码地址:http://u.115.com/file/f23aeb448f
注意此例仅在debian sid/ubuntu10.10 编译/测试.
 posted on 2011-12-04 11:21  chingliuyu  阅读(2330)  评论(0编辑  收藏  举报