Firefox[npapi]插件开发-调用方法时Firefox冻结

Firefox[npapi]插件开发-调用方法时Firefox冻结,firefox,plugins,freeze,npapi,Firefox,Plugins,Freeze,Npapi,我正在学习如何编写Firefox插件。 我从Mozilla下载了npruntime示例,编译并运行了它。 从插件获取属性效果很好,但是当我尝试 调用一个方法,Firefox冻结。 我认为这个示例可能有问题,所以我编写了自己的基本脚本插件,它有一个属性和一个返回字符串的方法。 该属性运行良好,但调用该方法再次导致Firefox冻结 我错过什么了吗? 我试着调试插件,一切都很好。好的 调用函数并正确返回值。如果我试图在Firefox挂起时停止进程,我会在Windows DLL中停止,而不是在我的代码

我正在学习如何编写Firefox插件。 我从Mozilla下载了npruntime示例,编译并运行了它。 从插件获取属性效果很好,但是当我尝试 调用一个方法,Firefox冻结。 我认为这个示例可能有问题,所以我编写了自己的基本脚本插件,它有一个属性和一个返回字符串的方法。 该属性运行良好,但调用该方法再次导致Firefox冻结

我错过什么了吗? 我试着调试插件,一切都很好。好的 调用函数并正确返回值。如果我试图在Firefox挂起时停止进程,我会在Windows DLL中停止,而不是在我的代码中,也不是在Firefox代码中

如果有人能给我指出正确的方向


谢谢。

我希望你已经解决了。如果不是这样的话,我刚刚发现这个例子(我假设那是该死的“npruntime样本”)是有缺陷的

在返回字符串时,示例使用函数
strdup
分配一个通过NP\u something方法传递的字符串。 事实上,NPAPI从那时起就开始处理分配的字符串,当试图销毁它时,它不能,因为
strdup
使用
malloc
,而不是
NPN_MemAlloc

解决方案是永远不要对传递给NPAPI函数的对象使用
malloc
或new。 在npruntime示例中,错误位于第452行:

STRINGZ_TO_NPVARIANT(strdup("foo return val"), *result);
第466行:

STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
我用以下代码更正了它:

char* src = "foo return val";
char* out = (char *)NPN_MemAlloc(strlen(src) + 1);
strcpy(out, src);
STRINGZ_TO_NPVARIANT(out, *result);
它成功了。
但有人会认为,示例中的此类缺陷应该由mozilla SDK维护人员纠正。

我为每个浏览器开发了npruntime。 它在所有浏览器中都运行良好,但firefox只有在Windows7中才会停止运行

我解决了将firefox配置“dom.ipc.plugins.enabled”编辑为false的问题。
我不知道它是否有效,但值得一试。

好发现!你能找到一个bug吗?如果人们在几周内没有反应,试着找到合适的人来查看它(例如,在irc.mozilla.org/developers中四处询问)?嘿,谢谢!我们的一位开发人员已经提交了一个bug,并在其中安装了一个补丁。如果你想获得命名信用卡,请输入错误并说明你的姓名。