基本原则:
插件
当你谈论一个网络浏览器时,插件通常指NPAPI或类似的插件,它是特定于页面的。IE不支持“插件”,但它们有可以填补类似功能的活动控件,尽管也有更类似扩展的BHO(浏览器帮助对象)ActiveX控件。因此,我们(FireBreath团队)通常使用术语“插件”来指代像NPAPI插件一样工作的东西,“扩展”一词用于指代像典型扩展(firefox XPI,Chrome CRX等)一样工作的东西。
插件只知道他们所在的页面;他们不了解浏览器或其他页面中加载的内容。
插件已经导致了许多安全问题,因为它们实际上运行本地代码。这导致了很多针对它们的歧视 - 大部分应该是应得的。由于这个原因,以及NPAPI令人非常痛苦(因此创建了FireBreath),大多数浏览器正在试图淘汰插件。除非没有其他解决问题的方法,否则不应使用插件。
话虽如此,在许多情况下它们是唯一的选择。
扩展
扩展是特定于浏览器的东西,每个浏览器都有所不同,但往往能够更多地了解浏览器的整体状态;它们可能会自动添加到页面中,可以从页面分开访问等。
插件/扩展
插件或扩展是添加到Web浏览器以增加其功能的软件组件。虽然这两者通常用于相似的目的,但它们之间存在重要差异。
关键区别
一旦安装,扩展通常是自动的。插件有两种实例化方式:1)通过网页HTML中的<object>
或<embed>
标签,2)因为它们被注册为处理浏览器不支持的MIME类型。
FireBreath
FireBreath处理插件。它与典型的浏览器扩展没有任何关系,只与插件有关。它是一个C ++框架,而不是JavaScript框架,并且允许您添加可以从网页内部使用的功能。通常,FireBreath插件是从<object>
标记内部使用的。
NPAPI之后的FireBreath
您可能已经知道或不知道,Chrome已从版本45开始停止支持NPAPI插件,Firefox也从版本52(不包括版本52 Extended Support Release,该版本将在另一年内支持它们)开始这样做。 FireBreath 2.0现在已经被几家公司投入生产,并且可以通过本机消息传递通过帮助程序扩展“生成”(实际上不是插件,但类似于插件)与Google Chrome和Firefox一起使用。主要限制是绘图;没有办法直接通过本地消息传递向浏览器绘制(好吧,没有好的方法,在Windows之外的平台上根本没有办法)。
最终,我们可能会在FireBreath 2.0中添加一些抽象支持,以使用Canvas / WebGL通过本机消息传递桥绘制,但这还没有完成。老实说,我不需要它,所以我没有费心做它。 FireBreath是一个开源框架,遗憾的是,在过去几年中没有得到足够的用户支持,因此文档有点过时,并且有许多小事情尚未完成。
本机消息传递方法依赖于扩展 - 当然,我们主要是为了混淆每个人而这样做,但也因为这是允许我们从Google Chrome或Firefox页面与FireBreath插件通信的唯一方式。
*(最后更新日期:2017年3月6日;Firefox 52计划明天发布)
希望这有所帮助。另请参阅: