npapi插件与firefox 4.0及更高版本存在问题

npapi插件与firefox 4.0及更高版本存在问题,firefox,npapi,npruntime,Firefox,Npapi,Npruntime,我已经为firefox/chrome开发了基于npruntime的插件,它可以与ff3.6/chrome 10配合使用,但是当我加载插件后在firefox 4.0或更高版本中加载任何其他插件时,firefox就会挂起 i、 e如果我在插件加载后打开gmail,那么firefox将停止响应,并且我已经确认它与插件容器有关。 谁能告诉我到底哪里出了问题??任何指点都将不胜感激。 提前谢谢 这是ff6的调用堆栈 ntdll.dll_ZwWaitForSingleObject@12() ntdll.dl

我已经为firefox/chrome开发了基于npruntime的插件,它可以与ff3.6/chrome 10配合使用,但是当我加载插件后在firefox 4.0或更高版本中加载任何其他插件时,firefox就会挂起 i、 e如果我在插件加载后打开gmail,那么firefox将停止响应,并且我已经确认它与插件容器有关。 谁能告诉我到底哪里出了问题??任何指点都将不胜感激。 提前谢谢

这是ff6的调用堆栈

ntdll.dll_ZwWaitForSingleObject@12()
ntdll.dll_ZwWaitForSingleObject@12()
内核32.dll_WaitForSingleObjectExImplementation@12() 内核32.dll_WaitForSingleObject@8()
nspr4.dll_PR_MD_WAIT_CV(_MDCVar*CV,_MDLock*lock,unsigned int timeout)
nspr4.dll_PR_WaitCondVar(PRThread*thread,PRCondVar*cvar,PRLock*lock,unsigned int timeout)
nspr4.dll!PR_WaitCondVar(PRCondVar*cvar,无符号整数超时)
xul.dll!mozilla::CondVar::Wait(无符号整数间隔)
xul.dll!mozilla::ipc::GeckoChildProcessHost::SyncLaunch(std::vector,std::allocator>,std::allocator,std::allocator>>>>aExtraOpts,int aTimeoutMs,base::ProcessArchitecture arch) xul.dll!mozilla::plugins::PluginProcessParent::Launch(int timeoutMs)
xul.dll!mozilla::plugins::PluginModuleParent::LoadModule(const char*aFilePath)
xul.dll!GetNewPluginLibrary(nsPluginTag*aPluginTag) xul.dll!nsNPAPIPlugin::CreatePlugin(nsPluginTag*aPluginTag,nsNPAPIPlugin**aResult)
xul.dll!CreateNPAPIPlugin(nsPluginTag*aPluginTag,nsNPAPIPlugin**aOutNPAPIPlugin)
xul.dll!nsPluginHost::EnsurePluginLoaded(nsPluginTag*插件)
xul.dll!nsPluginHost::GetPlugin(const char*aMimeType,nsNPAPIPlugin**aPlugin)
xul.dll!nsPluginHost::TrySetUpPluginInstance(const char*aMimeType,nsIURI*aURL,nsIPluginInstanceOwner*aOwner) xul.dll!nsPluginHost::SetUpPluginInstance(常量字符*aMimeType,nsIURI*aURL,nsIPluginInstanceOwner*aOwner)
xul.dll!nsPluginHost::InstanceEmbeddedPlugin(常量char*aMimeType,nsURI*aURL,nsIPluginInstanceOwner*aOwner,int-aaAllowOpeningStreams)


我会先尝试关闭IPC模式;您的堆栈似乎表明它在等待插件进程启动时挂起,但我不知道为什么它会挂起,因为它应该有一个超时。如果关闭IPC模式有帮助,那么问题可能是浏览器和插件主机进程之间的IPC受到干扰

接下来,我将尝试向DLL中的所有入口点添加断点。您可以通过在DllMain中放置sleep(10000)或类似的东西来连接调试器;当插件开始加载时,在执行任何可能造成损害的操作之前,它应该首先点击该按钮,您可以使用调试器连接到插件主机进程,然后检查您将其添加到的入口点,等等。经过足够长的时间,最终应该会产生一些关于可能发生的事情的线索


您也可以尝试将它移植到类似的东西上,这是众所周知的工作方式,并且消除了您必须犯这样一个模糊错误的大多数机会,很可能是某些浏览器不喜欢这样的错误。

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

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

您运行的是什么操作系统?您是否尝试附加调试器以查看其挂起的代码位置?我正在运行windows 7…并添加了调用堆栈。。。