用于种种原因,最近对制作浏览器(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"按钮。
chrome扩展的演示方法
扩展在chrome_extension目录下
加载扩展(加载方法看[6]的第4步),
然后页面上每个link的右键菜单会多出一个菜单项"save link to /tmp/link.log",
点击该菜单项后link的url就会被保存到/tmp/link.log
本例源码地址:NpapiPlugin.zip
注意此例在debian sid/ubuntu10.10/windows 7 编译/测试。