FireBreath是什么见http://www.firebreath.org
使用FireBreath开发浏览器插件的优点在于可以实现跨浏览器插件开发,而且MinRelease可以再1M以下.而时隔两年FireBreath项目再次更新应对NPAPI的淘汰值得我们去期待!
扯逼完毕......
下面开始装逼
在浏览器插件开发中我们需要使用到的无非就是C++与javascript的互交
C++调用javascript函数
在MFC环境下还是比较麻烦的,首先你需要判断状态,然后是各种类型转换,但是在FireBreath只需要4行!
在XXXAPI.h/cpp
#include "DOM/Window.h"//需要调用js函数时需要这个头文件
//通过js函数名调用js函数
void XXXAPI::RunJSFunction(std::string strCallback,std::string strParmer)
{
FB::DOM::WindowPtr window = m_host->getDOMWindow();
if (window && window->getJSObject()->HasProperty("window")) {
FB::JSObjectPtr obj = window->getProperty<FB::JSObjectPtr>("window");
obj->Invoke(strCallback, FB::variant_list_of(strParmer));
}
}
obj->Invoke(strCallback, FB::variant_list_of(strParmer));
strCallback:就是调用js里面的函数(strCallback可以是js函数的名称(std::string))
FB::variant_list_of(strParmer):参数列表,如果多个参数时可以做一下处理
FB::VariantList varParmer = FB::variant_list_of(1)("2")(3.0);//可以直接写入各种类型
接着就是javascript调用C++
在XXXAPI.h/cpp
构造函数里面添加
XXXAPI::XXXAPI(const XXXPtr& plugin, const FB::BrowserHostPtr& host):
m_plugin(plugin), m_host(host)
{
.....
//通过js函数名调用js函数
registerMethod("RunJSFunction", make_method(this, &XXXAPI::RunJSFunction));
.....
}
编译完成之后,你就可以在html里面加入
<script type="text/javascript">
function test(str){
alert("RunJSFunction : " + str);
}
function RunJSFunction(str){
plugin().RunJSFunction("test",str);
}
</script>
浏览控件的第二个重点就是多线程非阻塞
void XXXAPI::RunInThread(std::string strCallback,std::string strParmer)
{
boost::thread t(boost::bind(&XXXAPI::RunJSFunction,this,strCallback,strParmer));
}
没错,这里调用的线程函数就是上面提到RunJSFunction,FireBreath里面直接支持boost,你可以直接像上面那样调用成员函数
以上就是FireBreath的非界面相关例子,如果涉及到界面例如播放器的话,可以参考firebreath_vlc
完整例子下载http://download.csdn.net/detail/reloner12/8644479
全文完