附加组件、插件和扩展之间的确切区别

33
插件、附加组件和扩展之间的确切区别是什么? 我已经阅读了很多关于这个问题的内容,但还是感到困惑。 例如,请看以下四个定义:
1-火狐浏览器说“附加组件是指扩展、主题和插件的集合”(见https://support.mozilla.org/en-US/questions/790919)。
2-www.Differencebetween.net说“插件和附加组件只是扩展……插件是通常用于指第三方软件(与某个程序交互),如Flash Player……”
3-wikipedia(https://en.wikipedia.org/wiki/Plug-in_%28computing%29)说插件正在被弃用。
4-我在另一个网站上读到,插件比附加组件大,并包含附加组件的概念。
我已经阅读了firefox add-on vs. extensions vs. pluginshttp://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference/中提供的答案。
然而,我想特别了解在Firebreath中的区别,插件会在用户同意后自动执行,而插件需要手动安装。此外,我认为插件嵌入在htm页面中,而Add-on则以类似于firefox中的xpi文件的形式存在。
如果有关于这三个概念的确切、综合和精确的定义,以便更好地理解它们之间的区别,将不胜感激。

1
答案取决于你所谈论的浏览器,因为它们使用不同的术语。 - Xan
1
在Firefox中,插件与附加组件是不同的。在Firefox中,扩展程序与附加组件是相同的。可以像这样在Firefox中创建插件:https://developer.mozilla.org/zh-CN/Add-ons/Plugins。 - Noitidart
1
@Xan 谢谢你,你是 Google Chrome 的专家,能否在你的范围内确定这些差异? - Hosein Aqajani
1
亲爱的@Noitidart,我看到了你引用的页面,上面写着“插件是遗留技术”,你有什么看法? 你对我在问题中提到的4个定义有什么看法? 插件是否真的嵌入在htm页面中,没有像xpi这样的单独文件? - Hosein Aqajani
1
Yep插件是遗留的,NPAPI在未来某个时候将被弃用。替代方案是使用附加组件中的js-ctypes。我没有将插件嵌入HTML页面的经验,但文章让它听起来似乎是可能的。不过不要这样做,谷歌浏览器已经弃用了NPAPI,我看到Firefox很快也会这样做。 - Noitidart
显示剩余4条评论
2个回答

20

基本原则:

插件

当你谈论一个网络浏览器时,插件通常指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计划明天发布)

希望这有所帮助。另请参阅:

1
感谢Taxilian的回答,这是一个精确、全面和准确的答案。您的框架非常有用,适用于许多目的,但我认为“FireBreath”对许多用户来说是未知的。我花了很多时间通过插件处理智能卡,而我可以通过FireBreath快速解决我的问题。因此,应该适当地介绍FireBreath。 您的辛勤工作受到任何了解FireBreath的人的赞赏。 我希望尽快解决FireBreath2中插件和NPAPI过时的问题。 - Hosein Aqajani
1
FireBreath2已经可以使用本机消息传递了,只是文档记录得不好。这需要有愿意贡献的用户。 - taxilian
1
据我所知,FireBreath没有任何竞争对手。 FireBreath填补了特定的市场空缺。有一些扩展框架,我从未使用过也无法告诉您任何信息 - 使用这些框架的优点是它们不是插件。如果您不需要插件,请不要使用它们。 - taxilian
1
亲爱的@taxilian, 我想通过本机消息在Chrome浏览器扩展中使用c++ dll(winscard.dll),但是我无法建立此连接。是否可能进行此通信?我还有其他问题,可以给我您的电子邮件吗? - Hosein Aqajani
2
我会假设无论你来自哪个文化,那个评论的意图远比在我的文化中听起来的侮辱要少。无论如何,对于那些应该在StackOverflow上提问的问题,我不会提供我的个人电子邮件地址;我建议将来不要在stackoverflow上寻求此类帮助,这很可能会引起反感。 - taxilian
显示剩余3条评论

0
我很久以前就开始使用插件和扩展了。我甚至还记得由于插件的原因,标签页经常崩溃。我对附加组件的了解来得很晚。这只是进化的一部分。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,比如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到更多关于如何撰写好回答的信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接