2012-11-19 51 views
0

我为Windows开发了npapi插件。它适用于Chrome,Opera,Firefox。 但它在Safari中崩溃。 我试图找到稳定的npapi插件,它在safari中工作,但我没有找到这一个。Npapi插件在safari中崩溃

例如:

1)我从插件FOT在第一时间获取属性。有用。

2)但是当我尝试再次做它失败。

但我看到闪光灯在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

你漏了NPN_UTF8FromIdentifier返回的字符串,你需要NPN_MemFree它们。 –

+0

哇。谢谢。我不知道在执行NPN_MemFree –

+0

糟糕之后我必须释放内存。不在NPN_MemFree之后,但在NPN_UTF8FromIdentifier之后。 –

回答

0

我发现问题了! 我看了Firebreath的源代码并理解。 当我在NPP_GetValue中返回脚本对象时,它在代码中。 我没有调用NPN_RetainObject。我认为Safari发布了我的对象并将其销毁。

+0

这绝对会做到这一点 – taxilian

0

有许多是在Safari上运行的插件;如果没有看到代码和崩溃日志,我们甚至无法猜测问题出在哪里。

不仅如此,你还没有提到你正在使用的操作系统; Mac Safari比Windows Safari更稳定。这与FireBreath

GradeCam's NPAPI插件工作在野生动物园大(MAC肯定,窗户上次我检查,但也许我还没有尝试过的最新版本)。

+0

一个附加的示例代码,崩溃。这很简单。 –

+0

而我开发的Windows –