【问题标题】:Npapi plugin crashes in safariNpapi 插件在 Safari 中崩溃
【发布时间】:2012-11-19 04:47:45
【问题描述】:

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

例如:

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 崩溃中获取正确的“版本”时,这段代码只能工作一次

【问题讨论】:

  • 你泄露了 NPN_UTF8FromIdentifier 返回的字符串,你需要 NPN_MemFree 他们。
  • 哇。谢谢你。不知道执行完NPN_MemFree后还要释放内存
  • 糟糕。不是在 NPN_MemFree 之后,而是在 NPN_UTF8FromIdentifier 之后。

标签: c++ windows safari npapi


【解决方案1】:

有很多插件可以在 Safari 上运行;在没有看到您的代码和崩溃日志的情况下,我们甚至无法猜测问题所在。

不仅如此,您还没有提到您使用的是哪个操作系统; Mac Safari 远比 windows Safari 稳定。

GradeCam's 使用FireBreath 构建的 NPAPI 插件在 safari 上效果很好(绝对是 mac,我上次检查过 windows,但我可能没有尝试过最新版本)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多