无法在 NPAPI 插件中使用 POCO 定时器
Cannot use POCO Timer in NPAPI plugin
我已经实现了一个在 Firefox 中工作的 NPAPI 插件。接下来,我尝试添加一个方法,该方法从 JavaScript 端接受一个函数作为回调。
最初我试图在同一方法中立即调用此回调方法,但在 JavaScript 方面完全没有做任何事情。
然后我尝试使用 Poco::Util::Timer 和 TimerTask 实现一个计时器。当尝试在代码中以任何方式实例化 Timer 或 TimerTask 时,Firefox 将不再加载插件。在 about:plugins 中没有插件的踪迹。
据我所知,没有办法弄清楚为什么插件没有加载,我也没有找到任何关于在实现 NPAPI 插件时什么是允许的和什么是不允许的参考。
任何指点都是最有帮助的。如果需要,我可以 post 编码。
关于 NPAPI 插件,您需要了解的主要内容是,您无法通过备用线程以任何方式与浏览器交互。
不过,我会先回到您的第一个测试,因为如果您立即调用传入的 NPObject(使用 InvokeDefault)应该会起作用。
我的猜测是,对于您的定时器,您可能 运行 在不同的线程上,或者您正试图篡夺插件线程中的消息循环,这两种情况都会给您带来问题。你看过 FireBreath 吗? FireBreath 1 可能会为您提供所需的一切,而无需了解 NPAPI 的所有实现细节。
我已经实现了一个在 Firefox 中工作的 NPAPI 插件。接下来,我尝试添加一个方法,该方法从 JavaScript 端接受一个函数作为回调。
最初我试图在同一方法中立即调用此回调方法,但在 JavaScript 方面完全没有做任何事情。
然后我尝试使用 Poco::Util::Timer 和 TimerTask 实现一个计时器。当尝试在代码中以任何方式实例化 Timer 或 TimerTask 时,Firefox 将不再加载插件。在 about:plugins 中没有插件的踪迹。
据我所知,没有办法弄清楚为什么插件没有加载,我也没有找到任何关于在实现 NPAPI 插件时什么是允许的和什么是不允许的参考。
任何指点都是最有帮助的。如果需要,我可以 post 编码。
关于 NPAPI 插件,您需要了解的主要内容是,您无法通过备用线程以任何方式与浏览器交互。
不过,我会先回到您的第一个测试,因为如果您立即调用传入的 NPObject(使用 InvokeDefault)应该会起作用。
我的猜测是,对于您的定时器,您可能 运行 在不同的线程上,或者您正试图篡夺插件线程中的消息循环,这两种情况都会给您带来问题。你看过 FireBreath 吗? FireBreath 1 可能会为您提供所需的一切,而无需了解 NPAPI 的所有实现细节。