【发布时间】:2012-09-14 02:42:00
【问题描述】:
我制作了一个简单的 NPRuntime 插件,它在加载时调用 Javascript 函数。 基于的示例是 seamonkey,它在 Google Chrome 上运行良好,但在 FireFox 上却不行。
我跟踪代码以找出问题所在,并找到了这一行。
NPObject* window;
NPError err = NPN_GetValue(pNPP, NPNVWindowNPObject, &window);
if (!window)
_log("Can not get DOM window %d", err);
错误返回 NPERR_INVALID_PARAM。
我猜这个简单的例子可能适用于旧版本的 Firefox... 12.0? 13.0? (我不确定)现在我使用的是最新版本的 FireFox 15.0。
我们将不胜感激。
【问题讨论】:
-
您在生命周期的哪个位置调用它?在什么功能上?
-
@taxilian 在消息泵线程中。我在调用函数和 NPP_SetWindow 中进行了测试,但相同。它返回 NPERR_INVALID_PARAM 并且窗口为空。
-
消息抽线程?那到底是什么?你只能在主线程上使用 NPP_ 函数......不过,我的第一个猜测是你的 pNPP 很糟糕。信息不足,只能猜测
-
@taxilian 线程会观察队列,其中包含从套接字类接收到的消息。如果队列有对象,线程立即执行那些行(NPN_GetValue,NPN_Evaluate)。当浏览器句柄传递给插件时,我打印了 pNPP 的地址,它是相同的地址。 NPN_Function 也应该在主线程中调用?抱歉英语不好:(
-
@taxilian 哎呀。你是对的。我在主线程中调用 NPN_GetValue,它返回成功。但是,我真正想做的是在另一个线程中调用 javascript。如何制作?