【问题标题】:Loading flash .swf using NPAPI interface使用 NPAPI 接口加载 flash .swf
【发布时间】:2011-02-16 03:50:18
【问题描述】:

我尝试编写一个直接加载 SWF 文件的程序,我将使用 NPAPI 来实现该程序。

但是,我不知道如何开始。我的意思是如何在可可和NPAPI之间进行通信?以及如何构建程序的架构?

我在谷歌上搜索了很多次,对于这个主题没有太多有用的信息。

希望有人能帮助我。

任何建议将不胜感激。

【问题讨论】:

标签: cocoa flash npapi


【解决方案1】:

构建 NPAPI 主机并非易事;如果你真的想从头开始自己做,最好的办法是查看 Gecko、WebKit 和/或 Chromium 的源代码,并从那里重新使用任何你可以使用的东西(假设你的应用程序的源代码许可使这成为可能)。

除此之外,Mozilla's NPAPI documentation 是最好的来源,还有accepted NPAPI extensions 列表以了解最近的变化(因为你提到了 Mac,你至少需要阅读和理解 Cocoa、Core Graphics、核心动画和谈判提案)。请记住,NPAPI 的很多工作方式都是基于其他浏览器所做的事实上的标准,因此仅提供文档是不够的。

你在评论中提到你不想使用 WebKit 因为一个“安全问题”——如果你知道 WebKit 中的一个安全问题,为什么不修复它而不是从头开始构建一个非常复杂的系统呢?非常、非常,如果您从头开始实现 NPAPI 主机,您最终会比在课程中经过测试、调试和改进的成熟实现中出现更少的安全错误几年。

【讨论】:

  • 其实我想用WebKik来实现那个程序(因为互联网资源比较多),我从来没有接触过那种开发。但是我的领导告诉我使用 WebKit 会导致性能下降,并且存在跨域问题的安全问题。所以他让我学习和构建一个使用 NPAPI 的程序。更准确地说,我需要加载一个Flash插件,并发送一个请求给插件,请求加载一个SWF,或者控制SWF的内部行为。感谢您的帮助。
  • 那么我希望你的项目有一个源代码许可证,允许你从现有的开源浏览器的实现开始。如果没有,那么你的工作就归结为单枪匹马地从头开始编写一个复杂的、规格不足的 API 的实现,它充满了微妙的问题,没有任何先验知识,并且以某种方式最终得到了基本上每个方面都更好的东西比 WebKit 团队多年工作的产物。作为一个在这里有很多经验的人(你会在一些 NPAPI 扩展上看到我的名字),我强烈建议你不要走这条路。
【解决方案2】:

特别是考虑到到目前为止您似乎拥有的插件背景数量,我会强烈建议您使用FireBreath。它至少会让你通过插件部分。剩下的就看你自己了,不会那么简单。

要知道的是,Mac OS X 上的不同浏览器使用不同的绘图模型和不同的事件模型。对于事件模型,一般的经验法则是 32 位浏览器支持 Carbon,64 位支持 Cocoa,尽管一些 32 位浏览器支持 Cocoa。根据 32/64 位和浏览器(和版本),您可能需要使用 QuickDraw、Cocoa、CoreAnimation 或 CoreGraphics 进行绘制。

FireBreath wiki(主网站)上有 more information about this

【讨论】:

  • 感谢您的建议!但是,我不会做插件。我想构建一个只有一个按钮的Mac窗口应用程序,只需单击按钮,应用程序就会弹出一个SWF动画。我不会尝试使用 WebKit 和 Flash'in'App 来实现我的程序,因为 Webkit 存在安全问题,而 Flash'in'App 成本很高。从那以后我决定使用 NPAPI。很感谢你的建议,希望你能给我更多的建议。谢谢。
  • 好的;我会看一下 FireBreath 中的 NPAPIHost 项目,它是插件主机的核心。不过,正如 smorgan 所说,您正在做的事情非常重要。我会考虑改用 WebKit;你想要做的不是一件简单的事情。不过,我给您的链接仍然有用,因为如果您不知道如何实现自己的链接,您将无法托管其他人的链接。正如 smorgan 所说,如果您知道存在安全问题,请修复它——或者至少报告它。
  • 非常感谢。安全问题是关于跨域问题。具体细节我不知道,因为那个测试程序不是我建的,所以我就知道这么多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多