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的多进程模式下崩溃一例
Q新闻|Firefox不再支持Flash以外插件;Oracle计划新移动OpenJDK项目;JetBrains放宽许可条款