我为Windows开发了npapi插件。它适用于Chrome,Opera,Firefox。 但它在Safari中崩溃了。 我试图找到稳定的npapi插件,它可以在safari中运行,但我找不到这个。
例如:
1)我第一次从插件中获取属性。它有效。
2)但是当我再次尝试时它会失败。
但我发现Flash可以在Safari中使用。为什么? 谢谢。
bool CScriptableObject::HasProperty(NPIdentifier name)
{
ATL::CString strFunc = NPN_UTF8FromIdentifier(name);
if(!strFunc.CompareNoCase(PROPERTY_VERSION))
{
return true;
}
return false;
}
bool CScriptableObject::GetProperty(NPIdentifier name, NPVariant *result)
{
ATL::CString strFunc = NPN_UTF8FromIdentifier(name);
if(!strFunc.CompareNoCase(PROPERTY_VERSION))
{
INT32_TO_NPVARIANT(6, *result);
return true;
}
return false;
}
所以,当我尝试从js Safari崩溃中获得“版本”时,此代码只能工作一次
答案 0 :(得分:0)
有许多插件适用于Safari;如果没有看到您的代码和崩溃日志,我们甚至无法猜测问题是什么。
不仅如此,您还没有提到您正在使用的操作系统; Mac Safari远比Windows Safari稳定。
GradeCam's使用FireBreath构建的NPAPI插件在safari上运行得非常好(我肯定知道,我最后检查的是Windows,但我可能没有尝试过最新版本)。
答案 1 :(得分:0)
我发现了问题! 我查看了Firebreath的源代码并了解了。 当我在NPP_GetValue中返回脚本化对象时,它在代码中。 我没有调用NPN_RetainObject。我认为Safari发布了我的对象并将其销毁。