我已经编写了一个无窗口的NPAPI插件,我将在web浏览器JavaScript调用的插件函数中执行一些持久的操作(例如,发送带有图像数据的http post请求)。
为了防止web浏览器挂起,我为每个冗长的操作创建一个工作线程。
我的问题是,如果浏览器关闭,而仍有工作线程在运行,如何防止我的插件实例在工作线程完成之前被销毁(在NPP_Destroy?)?
对于ActiveX控件,我只需在每次启动/完成工作线程时添加/释放插件实例的引用计数。但对于NPAPI插件,引用计数仅针对NPObject(通过NPN_CreateObject创建),而不是插件实例本身。现在我感到困惑。
如有任何帮助,我们将不胜感激。
你不能。我想你可以启动另一个流程并执行其中的操作;这样,当插件关闭时,你可以向它发送一个信号,并说"你需要关闭,当你准备好了",但在它完成之前不要关闭它。
插件本身——即使在IE中——你也无法控制它何时关闭,因为如果浏览器关闭,它无论如何都会关闭所有插件。
欢迎来到插件之地——你无法控制生命周期。