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

How to fire events when plugin is loaded

本文关键字:事件 插件 加载      更新时间:2023-09-26

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

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

这是我的创建JSAPI代码:

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;
}

为什么?

谢谢。

onPluginReady 可能会在调用来自 param 标签的 onLoad 回调之前被调用;这意味着您的事件处理程序尚未附加。这就是FireBreath提供onload param回调的原因 - 它为您提供了一个附加事件处理程序并找出已加载内容的位置。

编辑以从评论中澄清:

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