Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在加载插件时触发事件_Javascript_Events_Firebreath - Fatal编程技术网

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

Javascript 如何在加载插件时触发事件,javascript,events,firebreath,Javascript,Events,Firebreath,在我的插件中,我需要能够在加载插件后触发事件。 我不想使用内置机制(将其添加到对象参数中),因为我需要能够控制随事件触发一起发送的参数 问题是,当我试图在onPluginReady中触发事件时,它就是不触发。。在调试时,我注意到m_proxies是空的(在jsapimpl::firevent中),但是如果我在onMouseDown方法中尝试相同的代码来触发事件,那么它工作得很好 这是我的createJSAPI代码: FB::JSAPIPtr plugin::createJSAPI() {

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

问题是,当我试图在
onPluginReady
中触发事件时,它就是不触发。。在调试时,我注意到
m_proxies
是空的(在
jsapimpl::firevent
中),但是如果我在
onMouseDown
方法中尝试相同的代码来触发事件,那么它工作得很好

这是我的createJSAPI代码:

FB::JSAPIPtr plugin::createJSAPI()
{
    this->jsApi = JSApiPtr(new pluginAPI(FB::ptr_cast<plugin>(shared_from_this()), m_host));
    return this->jsApi;
}
事件不会被触发,但会:

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


谢谢。

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

编辑以澄清评论:


回调将提供一个参数,其中包含对根JSAPI对象的引用。请注意,在本例中,它不是对象或嵌入标记,而是JSAPI对象,因此您可以从中使用任何方法或属性。

因此,基本上我想要的方法是使用onload param回调,然后让我的js调用方法(或读取只读属性)在插件上获取所需的数据?这是有问题的,因为我将在同一页中有几个插件实例。对于每个这样的实例,我都有一个js对象,它有一个加载的方法(除其他外),当插件加载时应该调用这个方法。这个方法绑定到js对象(范围方面),我没有方法的名称可以通过
onload
param传递给插件。当然,我可以创建一个临时的js函数,传递名称,然后在调用后将其删除,以便将某个插件的onload与js对象关联起来,但这还远远不够理想。还有其他想法吗?这里有一个鸡和蛋的问题——只有在插件加载之后才能连接事件侦听器。有很多方法可以解决这个问题;您可以为每个实例使用一个唯一的id来确定它是哪个实例,您可以使用一个id设置另一个参数来记住,您可以为每个onload使用不同的函数。。。有很多选择。但是,在加载事件侦听器之前,您不能附加它。好的,我找到了一个解决方案,结果是js onload回调接收到一个参数,即jsapi,我只是在返回唯一id的参数上添加了一个只读属性,这样我就可以找到相关实例并让它知道它已加载。然而,我意外地发现,这些例子并没有说明这一点。。有文件记录吗?嗯;可能不是。请随时将其添加到网站!(这是一个维基)
bool plugin::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *)
{
    this->jsApi->fireMyEvent(this->myId);
    return false;
}