, ( FireFox) NPObjects , ; - ++, . FireBreath NPJavascriptObject ( NPObject, FireBreath JSAPI ), JSAPI.
JSAPI. instance_id JSAPI, std:: map, , .
static int counter;
int instance_id;
int MyPluginAPI::counter(0);
std::map<int, FB::JSAPIWeakPtr> apiMap;
FB::JSAPIPtr getJSAPIObjectById(int id) {
std::map<int, FB::JSAPIWeakPtr> fnd = apiMap.find(id);
if (fnd != apiMap.end()) {
return fnd.second->lock();
} else {
return FB::JSAPIPtr();
}
}
MyPluginAPI::MyPluginAPI() {
instance_id = counter++;
registerProperty("instance_id",
make_property(this,
&FBTestPluginAPI::get_instId));
}
int MyPluginAPI::get_instId() { return instance_id; }
void MyPluginAPI::init() {
apiMap[instance_id] = shared_from_this();
}
, , , ptrs, , . , JSAPIPtr, JSObjectPtr.
void doSomethingWithAnAPI(const FB::JSObjectPtr& obj) {
if (obj) {
int id = obj->GetProperty("instance_id");
FB::JSAPIPtr ptr = getJSAPIObjectById(id);
if (ptr) {
}
}
}
, .