如何在加载插件时触发事件

时间:2013-09-17 16:12:33

标签: javascript events firebreath

在我的插件中,我需要能够在插件加载后触发事件 我不想使用内置机制(在对象参数中添加它),因为我需要能够控制与事件触发一起发送的参数。

问题在于,当我尝试在onPluginReady中触发事件时,它就不会触发..在调试时我注意到m_proxies为空(在JSAPIImpl::FireEvent中),但如果我尝试使用相同的代码在onMouseDown方法中触发事件,那么效果会很好。

这是我的createJSAPI代码:

FB::JSAPIPtr plugin::createJSAPI()
{
    this->jsApi = JSApiPtr(new pluginAPI(FB::ptr_cast<plugin>(shared_from_this()), m_host));
    return this->jsApi;
}

这是onPluginReady代码:

void plugin::onPluginReady()
{
    this->getRootJSAPI();
    this->jsApi->fireMyEvent(this->myId);
}

并且事件未被触发,但这样做:

bool plugin::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *)
{
    this->jsApi->fireMyEvent(this->myId);
    return false;
}

为什么?

感谢。

1 个答案:

答案 0 :(得分:1)

在调用param标记的onLoad回调之前,很可能会调用onPluginReady;这意味着您的事件处理程序尚未附加。这就是FireBreath提供onload param回调的原因 - 它为你提供了一个附加事件处理程序并找出事物被加载的地方。

编辑以澄清评论:

回调将提供一个参数,其中包含对根JSAPI对象的引用。请注意,在这种情况下,不是对象或embed标记,只是JSAPI对象,因此您可以使用任何方法或属性。