Firefox 实例化 NPAPI 插件时崩溃

Posted

技术标签:

【中文标题】Firefox 实例化 NPAPI 插件时崩溃【英文标题】:Firefox crash instantiating NPAPI plugin 【发布时间】:2010-08-03 13:34:50 【问题描述】:

我之前将整个插件作为一个非常简单的实现工作,其中包含许多全局变量和静态变量,现在我将其转换为基于对象的设计,以便我可以安全地实例化多个实例等。

但是,因为我已经这样做了,所以在创建插件实例时,它会到达 MyScriptableNPObject::NewObject() 方法,它尝试调用 createobject() 但永远不会返回并且浏览器崩溃。

ScriptableNPObject* ScriptableNPObject::NewObject(NPP npp) 

 _DebugLog("ScriptableNPObject::NewObject");

 ScriptableNPObject* newObj =  (MyScriptableNPObject*)npnfuncs->createobject(npp, &_npclass);

 _DebugLog("ScriptableNPObject::NewObject - end");

    return newObj;

我在那里有一些基本的日志记录作为一种快速调试的方法,我可以看到这个方法是按预期从 getValue() 调用的,但最终日志永远不会出现,所以显然出了点问题在 createobject() 中。

我已经为我的 NPObject 定义了自己的 Allocate() 方法,据我所知,NPClass 的定义似乎是正确的,如下 -

NPObject* ScriptableNPObject::_Allocate(NPP npp, NPClass *aClass) 
     
    return (NPObject *)new ScriptableNPObject(npp);



NPClass ScriptableNPObject::_npclass = 
    NP_CLASS_STRUCT_VERSION,
    ScriptableNPObject::_Allocate,
    ScriptableNPObject::_Deallocate,
 NULL,
    ScriptableNPObject::_HasMethod,
    ScriptableNPObject::_Invoke,
    ScriptableNPObject::_InvokeDefault,
    ScriptableNPObject::_HasProperty,
    ScriptableNPObject::_GetProperty,
    NULL,
    NULL,
    NULL,
 ScriptableNPObject::_Construct,
;

从我所见,npnfuncs 结构也是有效的。所以我有点不知道出了什么问题!

任何帮助将不胜感激,

谢谢。

【问题讨论】:

我现在正在逃跑,但如果您还没有查看 this tutorial 或 FireBreath - NPAPI implementation here - 请查看。 【参考方案1】:

在调试器中检查你的 npnfuncs 指针;我敢打赌它有问题。

除此之外,获取 mozilla 源代码并构建调试版本,以便您可以单步执行代码并准确查看崩溃的位置。这是追踪您所描述的指针问题的最简单方法。

不过,说真的,我赞同 Georg 所说的话(尽管我承认有偏见):看看 FireBreath,它可以为您节省大量的故障排除,并且如果您愿意的话,它还可以让您更容易地移植到 IE。

【讨论】:

再次感谢,是的,您对 npnfuncs 指针的看法是正确的,我想我已经通过更改复制和存储结构的方式来修复它,尽管我不知道为什么它不起作用从...开始!至于 Firebreath,我本来更愿意使用它并首先尝试过,但是在将它集成到我们的构建结构中时遇到了问题,所以很遗憾不得不放弃那个。 很抱歉听到这个消息;有时将现有的构建结构切换为使用 cmake 确实需要一些工作,但如果没有 cmake,几乎不可能达到 FireBreath 所具有的简单程度。有时你可以做一些不同的事情来简化它,但你的项目的复杂性当然会影响到这一点。 亲爱的 Adam Cobb,您能告诉我们您是如何解决问题的吗? Voulnet:他的问题是他没有正确复制结构。如果您遇到类似问题,请在此处查看如何正确解决问题的好示例:code.google.com/p/firebreath/source/browse/src/NpapiPlugin/…

以上是关于Firefox 实例化 NPAPI 插件时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

结合FireBreath在Chrome/FireFox的多进程模式下崩溃一例

Firefox 未检测到 NPAPI 插件

Q新闻|Firefox不再支持Flash以外插件;Oracle计划新移动OpenJDK项目;JetBrains放宽许可条款

从 Firefox 扩展调用 NPAPI 插件功能

NPAPI 插件未在 Firefox 中加载

仅使用 Firefox Addon SDK 在后台嵌入 NPAPI 插件