转http://blog.sina.com.cn/s/blog_71d9aee40100tpdz.html
1. 首先找到codeproject上面的一个例子npproject(Working on an NPAPI-browser plugin):
http://www.codeproject.com/KB/cross-platform/NPAPIBrowserPlugin.aspx
经过测试,这个例子用visual studio 10 和 xulrunner-3.6.22.en-US.win32.sdk编译,可以在firefox 3.6.22 版本上正常运行。
但是这个例子用最新的xulrunner-6.0.2.en-US.win32.sdk编译,在firefox 6.02 版本上运行会崩溃。如果禁用firefox 6.02 的 plugin-container (about:config -> filter = ipc -> dom.ipc.plugins.enabled = false),则该插件可以正常运行。
2. 经过测试,firebreath 可以编译出np**.dll插件,同时支持IE 9, firefox 6.02, chrome 14.0.835, safari 5.1. 即使不用它开发NPAPI插件,其中的代码也值得学习。
regsvr32 nphelloworld.dll 可以手动注册插件
Firefox 地址栏输入 about:plugins 查看已经安装的插件
C:\firebreath-FireBreath-615b970\build\projects\helloworld\gen\FBControl.htm 测试页面
查看.\src\3rdParty\gecko-sdk\includes\update.sh 发现他会去
http://npapi-sdk.googlecode.com/svn/trunk/headers/
更新最新的gecko-sdk头文件。所以我们也可以去该地址获取gecko-sdk头文件,而不用下载全部的gecko sdk了。
下面的地址介绍了在各种浏览器上调试插件的方法,一定要看!
http://www.firebreath.org/display/documentation/Debugging+Plugins
3. 调试NPAPI插件
(A) safari 5.1.1
(1)用管理员权限启动VC,在项目属性->general->output directory设置为C:\Program Files\Safari\Plugins,这样编译出的插件dll可以直接找到
(2) 启动Safari浏览器,VC debug->attach to process->选择WebKit2WebProcess.exe, 然后再用浏览器打开测试页面
(b) Chrome 15.0
(1) 将插件安装到C:\Users\"你的用户名"\AppData\Local\Google\Chrome\Application\15.0.874.106\plugins (根据你自己的情况更改)
(2)用管理员权限启动VC, 以下面的方式启动chrome: chrome.exe --plugin-startup-dialog
(3)打开插件测试页面,这时chrome会弹出对话框告诉运行插件的进程PID,然后用VC "attach to process" 到这个进程
(4)如果调试时遇到下面的错误 SXS: Invalid parameter(s) passed to FindActCtxSection,请安装微软的补丁Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update(http://www.microsoft.com/download/en/details.aspx?id=26347 6/7/2011)
4. NPAPI的调用顺序
NP_GetEntryPoints -> NP_Initialize