FB记录

FB 1.5.0及其以上:

1. js可以调 JSAPI的Methods, Properties, Attributes, and Events

2. Properties

在 ue3dwebAPI.h的构造函数里加这个:

 // Read-write property
        registerProperty("testString",
                         make_property(this,
                                       &ue3dwebAPI::get_testString,
                                       &ue3dwebAPI::set_testString));
        
        // Read-only property
        registerProperty("version",
                         make_property(this,
                                       &ue3dwebAPI::get_version));

其中对应的方法是:

// Read/Write property testString
std::string ue3dwebAPI::get_testString()
{
    return m_testString;
}

void ue3dwebAPI::set_testString(const std::string& val)
{
    m_testString = val;
}

js的调用代码是:

document.getElementById("btn_testsetvalue").onclick = function() {
            try{                var strvalue= document.getElementById("txt_setvalue").value;                            
            
                  if(plugin().valid){
                plugin().testString = strvalue;
            } else {
                alert("Plugin is not working :(");
            }                     
                } catch (e) {
                alert("btn_testsetvalue出错:\n" + e.name + ":" + e.message)
            }
        };

3. Methods

在 ue3dwebAPI.h的构造函数里加这个:

  registerMethod("echo",      make_method(this, &ue3dwebAPI::echo));
        registerMethod("testEvent", make_method(this, &ue3dwebAPI::testEvent));

ue3dwebAPI.cpp里实现函数:

FB::variant ue3dwebAPI::echo(const FB::variant& msg)
{
    static int n(0);
    fire_echo("So far, you clicked this many times: ", n++);

    // return "foobar";
    return msg;
}
void ue3dwebAPI::testEvent()
{
    fire_test();
}

在js里调用:

document.getElementById("btn_highlight").onclick = function() {
            try{                                
                var modelid= document.getElementById("txt_modelid").value;                    
                if(""!=modelid){    
                  if(plugin().valid){
                alert(plugin().echo("This plugin seems to be working!"));
            } else {
                alert("Plugin is not working :(");
            }
                
                
                }                
                } catch (e) {
                alert("btn_highlight:\n" + e.name + ":" + e.message)
            }
        };

document.getElementById("btn_testevent").onclick = function() {
            try{                                
            
                  if(plugin().valid){
plugin().testEvent;
            } else {
                alert("Plugin is not working :(");
            }
                
                
                                 
                } catch (e) {
                alert("btn_testgetvalue出错:\n" + e.name + ":" + e.message)
            }
        };


4. Event

注意:所有字母小写,以on开头,如 onload  onstart ondead  onsomethingelse

注意:永远不要在析构函数中触发事件(fire event),这样会导致未定义的行为,也许会使得页面重新加载的时候插件崩溃!

声明语法:FB_JSAPI_EVENT({事件名(不带on)}, {参数个数}, {参数类型列表})

比如:

class ue3dwebAPI : public FB::JSAPIAuto
{
public:

  FB_JSAPI_EVENT(echo, 2, (const FB::variant&, const int));

};

在ue3dwebAPI.cpp的某些函数中触发这个事件如下:

FB::variant ue3dwebAPI::echo(const FB::variant& msg)
{
    static int n(0);
    fire_echo("So far, you clicked this many times: ", n++);

    // return "foobar";
    return msg;
}

在js中使用:

首先写事件的实现函数:

function onPluginUpdate(num)   //对应update事件,参数为一个int类型

{

alert("number is " + num);

}

然后要注册这个事件(注意不同浏览器的区别):

function registerEvent()

{

var plugin = document.getElementById("pluginID");

if(plugin.attachEvent)                             //IE, 或者是判断浏览器内核

{

plugin.attachEvent("on" + "load", onPluginLoad);

}

else

{

plugin.addEventListener("load", onPluginLoad, false);

}

}



©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值