FireBreath的两个基本技巧

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

全文完


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值