NPAPI插件及其末路
本文是我在 果壳网 对于 【NPAPI插件是指?為何屏蔽呢?安全?卡死?崩溃?影響有多大呢?】 问题的回答,原帖见此处。
最近,Google宣布将屏蔽NPAPI插件,Firefox也开始在其应用商店中移除基于NPAPI的插件,为何屏蔽NPAPI插件,对我们有什么影响呢?
摘要
——写给那些“太长不看”的人们
NPAPI是上世纪末由网景(Netscape)开发的一套浏览器插件应用程序接口,它允许浏览器调用外部应用程序。
由于NPAPI的架构太老,存在安全性问题,难以维护,用户体验不好等种种原因,再加上现在有了HTML5这个替代品,以及不支持移动平台等原因,NPAPI插件已经开始退出历史舞台。
除了少数运行在Chrome、Firefox上的网银插件之外,你绝大部分的网络操作不会受到任何影响,现在早已不是NPAPI的世界了。
再说,人家只是屏蔽,还没到不支持的程度,你还可以手动开启嘛。
============================我是一条普通的分割线============================
以下为正文:
NPAPI是什么?
所谓NPAPI,就是指网景插件应用程序接口(Netscape Plugin Application Programming Interface)[1][2],是一种外部程序作为插件和浏览器共同完成网页展示的调用通道。
这么说可能很难理解。。。。那么我换一种表达方式。。我们在写网页的时候,在html中插入的<object></object>
或是<embed></embed>
标签 ,实际上就声明了一种在网页中调用其他插件的方法。
我们的浏览器中存在许多NPAPI插件
再或者说。。。我们浏览器中的外部播放器(音频、视频)、PDF阅读器、网银助手、X宝安全助手、XX下载管家这些东西,都是NPAPI插件。
这东西有什么用?
由于前期Mozilla的大力推动[3],加上微软的ActiveX表现实在太差[4],所以在相当长的一段时间里,(其实直到现在也是一样)绝大多数浏览器插件都是NPAPI开发的,而NPAPI也支持绝大部分的浏览器[2],除了IE那个异类[5]。。。。。。
对于用户来说,插件(plugin)允许更多样式的内容在浏览器中运行,支持一些浏览器未定义的行为和MIME类型。比如在浏览器中打开音乐,要使用音乐播放器——我记得我高中信息课上,初学网页制作,那时老师讲到,在网页里插入一个音频要使用<embed>
标签,浏览器会自动调用Windows Media Player运行——就像这样,对用户来说,插件就相当于运行在网页上的应用程序。
(↑ 注意,这和扩展(extension)不一样,扩展本身也是网页)
NPAPI哪里不好了?
不过,随着Web的发展、浏览器的强大、HTML5席卷全球,Javascript的功能已然逆天,甚至可以操控硬件[6],做算法竞赛的题目[7]。。。。。。这种时候,plugin本身的缺陷就显示出来了。 其实早在2011年,就有报道[8]指出以Adobe Flash Shockwave为首的浏览器插件是导致浏览器安全漏洞的最大原因。直到最近的统计中[9],仍能看到这种趋势。
由于运行插件的本质就是调用外部程序,将外部程序产生的输出写回浏览器中。这个把本应该在浏览器内部的数据向外发送的过程,就容易引起安全问题。
不仅是安全问题,NPAPI还有很多为人诟病的问题,首先是它用户体验极差。。。在登录网站的时候被要求安装插件这种感觉并不是十分好,尤其是对于很多电脑技术并不好的人来说,安装插件本身就不是容易的事情。 其次,还有插件的跨平台性不好[10],除了java外,其余的插件基本只能在单一的平台上运行 ,而移动时代的来临也使得Windows一家独大的时代受到了挑战——明显的,这些NPAPI插件很少能在移动端运行起来。
HTML5技术的快速发展,越来越多以前需要外部程序实现的操作,变得现在可以由浏览器直接实现。从音频、视频的播放,到使用电脑的摄像头、麦克风,从访问用户文件到远程会议[11]……更重要的是,通过HTML5和Javascript,这些东西变得标准化。对于开发者,不需要再编写复杂的代码来完成这些功能,而且并不用考虑为不同的平台开发不同的系统。对于用户,浏览器能做更多的事情,不仅方便,而且更加安全。
从网页视频播放器来说,几年前,flash播放器占绝对统治地位,HTML5播放器很难超越[12]。如今的Youtube,你已经很少能看到flash播放器,HTML5播放器已经成了默认的视频播放器。
正因如此,NPAPI已经是过时的架构,而新技术已经足够成熟足以替代老产品,让它退出历史舞台。
作为用户,NPAPI没了,我会有什么影响呢?
如果浏览器没了NPAPI。。。。。。事实上不会产生太大影响,因为根据统计[10],我们平常浏览网页使用的插件就那么几个,大多数用户可能一个插件都没有。 不过在中国,可能是另外一种样子,因为很明显的,现在所有的安全插件都不能用了,包括X宝的安全插件和各大网银。
HTML5技术发展到了今天,是该有一次这样的革新,让老标准彻底下台了。虽然对于各大网银可能很痛苦(“我们刚刚支持的Chrome,你TM告诉我不能用了?”),不过好在国内用户大多有开IE上网银的习惯(苦笑),所以停用NPAPI也是我们应该支持的。
还有,无论是Chrome还是Firefox,在其发布的声明中也只是说“屏蔽”,并未表示要彻底停止对NPAPI的支持。 作为例子,Java插件由于安全性问题,很早就已经默认屏蔽了。 所以说,在这之后的NPAPI插件,仍然可以通过手动开启。
作为开发者,NPAPI没了,我该怎么继续开发插件呢?
我觉得现在开发插件是没有前途的(←地图炮开启)!HTML5已经可以实现很多以前难以想象的功能了,可能很少有HTML无法做到的东西。再加上移动平台的大热,传统插件之后的路,我也是不看好的。
现在移动平台、云计算这些仍然是热门,开发纯云端应用、纯Web应用是个不错的选择,用户访问你的网址之后,应用就能直接在浏览器里运行,像是云端办公、云端图像处理、云端转码等应用使用量都在不断上升。
开发浏览器扩展来替代原来的插件。和插件不同,浏览器扩展本身也是网页,运行在浏览器内部,是个相对安全的环境。
以上都需要HTML5技术,而今天的HTML5技术,已经完完全全足够各种各样应用的开发,我认为在这方面,是不应该有顾虑的。
总结
其实没什么好总结的,和ActiveX一样,NPAPI也是过时的技术,现在的消失是正常的事情。不依赖外部程序,仅仅浏览器就能做到的事情已经非常多了,如果你不是NPAPI插件的开发者,这件事不会对你造成影响。
本来,计算机技术的发展就是一天一个样,我们总能用到最好的东西就行了,你说是不?
关于知识产权及引用:
本文采用知识共享协议CC BY-NC-ND 4.0,协议全文请点击此链接。
如果你也想使用这张图片,请点击 这里。
参考资料和引用来源:
- [1] http://zh.wikipedia.org/wiki/NPAPI
- [2] http://en.wikipedia.org/wiki/NPAPI
- [3] http://news.cnblogs.com/n/108581/
- [4] 我懒的去找来源,大家都懂的。。。
- [5] http://support.microsoft.com/kb/306790/zh-cn
- [6] http://www.csdn.net/article/2012-07-15/2807348
- [7] http://codeforces.com/blog/entry/79
- [8] http://tech.sina.com.cn/i/2011-05-23/11535558297.shtml
- [9] http://www.oschina.net/news/46493/browser-plugins-security
- [10] http://www.cnbeta.com/articles/253889.htm
- [11]http://zh.wikipedia.org/wiki/WebRTC
- [12] http://www.cnbeta.com/articles/115393.htm