当前位置: 首页 > news >正文

NPAPI 为什么会被 Chrome 禁用

其实何止是Chrome, 几乎所有的浏览器厂商都在淘汰/去掉NPAPI的支持
那么 NPAPI 到底出了什么问题?

NPAPI全称叫 Netscape plugin API(网景插件API), 你没有看错,就是那个当年被微软一棒子打死了好多年的 Netscape。

很久以前, Netscape 发明了NPAPI 这个种架构,来帮助浏览器渲染一些HTML没有的东西。比如 PDF, 视频等等。

事实上, NPAPI 插件架构是个非常好的架构, 一共就40几个API, 相对于另外一种浏览器插件架构: ActiveX来说,简直就是业界良心。

这里只有一个问题,它的发明时间是 1995 年,而在那个时候手机还可以砸死人,学校的电脑房要穿鞋套才能进。

那个时代所有类似的API设计者几乎都很自然的忽略掉了安全性问题。那个时候无论是网络环境还是商业环境相比现在都简单很多。

我们来看看NPAPI插件和浏览器的关系是什么, 同时对比下和同样执行网络下载代码的 Javascript 引擎的位置,

看懂了吧, 你以为是NPAPI是插件是吗?其实它和浏览器是平级运行的,它甚至可以打开网页,给你安一个木马,然后随手帮你关掉杀毒软件。什么,你说NPAPI不就40几个API嘛, 少年,你想多了,NPAPI不限制插件自由访问系统所有的API.

而 Javascript 引擎的限制就多得多,事实上,Chromium 系列的浏览器 Javascript 引擎均是运行在沙盒之中,一举一动都是被严密监视着的,敢有异常? 浏览器分分钟杀死你。

除了安全性以外,插件们还质量参差不齐,一旦崩溃浏览器就得跟着一起崩掉。 于是各个浏览器又一把鼻涕一遍泪的把插件们放到另外一个进程中运行,惹不起你们我们还躲不起嘛。其他的耗电量,图形效率,脚本效率一类的我就不多讲了,讲多了都是泪。

不过如果只是安全,那你把插件放到沙箱里面隔离起来不就行了嘛。

是的,谷歌当年也是这样想的,于是他们发明了 PPAPI, 然后在业界里面振臂一呼,大家来看,我的这个新API好啊,插件用起来更安全,有沙箱哦。

这个是业界伙伴们的态度:


Java: 我最近听说Chrome不支持我们了,大家请换浏览器,就这样

火狐: 我们对 PPAPI(pepper) 一点兴趣都木有。
(而且坑爹的是, Google 的PPAPI链接居然指的是Mozilla 的这个页面。不知道是不是存心恶心Mozilla).

如果你是个程序猿又有一颗好奇的心,表示无法理解PPAPI为何如此不受待见,你可以去这里看看PPAPI的文档 ,在这里
https://code.google.com/p/ppapi/

你一定会发现问题,其实不管你是不是程序猿你都会发现问题。因为,这个PPAPI官方文档链接里面,几乎木有文档

不过Adobe认怂了。 事实上Adobe很早就开始发布PPAI的版本。

所以如果你这几天再看到插件无法运行的对话框,如果上面写的是Flash, 你只需要去下载一个最新的ppai的flash 插件,或者下载一个新版的Chrome. 因为目前Chrome已经开始内置PPAPI版的Flash。

其他的,就看厂商们如何跟进吧。

========================================================================

总结来讲:
NPAPI 会被禁掉, 不过PPAPI会被继续支持,于是:

  • Java Plugin 需要重写
  • UnityPlugin 需要重写
  • SliverLight Plugin 需要重写。

用到以上插件的网站会收到影响。
使用 Flash 插件的网站不会收到影响, 因为 Flash 已经重写了。。

下面是 Google 对 流行NPAPI 的统计数据:


所以,普遍性就是:
如果你还在用任何一款NPAPI插件,然后对应的插件还没有PPAI版本或者HTML 替代版的话。节哀顺变吧。。

相关文章:

  • DOM模型
  • 深入理解vue.js双向绑定的实现原理
  • MVC、MVP、MVVM模式的概念与区别
  • Js中的数据属性和访问器属性
  • es5和es6的区别
  • CSS3 选择器
  • 科普一下SM系列国密算法(从零开始学区块链)
  • JavaScript this 关键字
  • js中的 || 与 运算符详解
  • js中的prototype、__proto__与constructor
  • js Object方法大全
  • Vuex的五个核心概念
  • Javascript的5种基本数据类型总结
  • “use strict” 严格模式使用
  • NPM简介
  • java中的hashCode
  • js继承的实现方法
  • unity如何实现一个固定宽度的orthagraphic相机
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 大整数乘法-表格法
  • 仿天猫超市收藏抛物线动画工具库
  • 区块链技术特点之去中心化特性
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Z2294. 打印树的直径
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (4)事件处理——(7)简单事件(Simple events)
  • (LeetCode 49)Anagrams
  • (SpringBoot)第七章:SpringBoot日志文件
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (黑马C++)L06 重载与继承
  • (一) springboot详细介绍
  • (原)本想说脏话,奈何已放下
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)【Hibernate总结系列】使用举例
  • (转)fock函数详解
  • ****Linux下Mysql的安装和配置
  • ***利用Ms05002溢出找“肉鸡
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core控制台应用程序初识
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET导入Excel数据
  • .NET连接MongoDB数据库实例教程
  • .net连接oracle数据库
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET值类型变量“活”在哪?
  • @RequestParam详解
  • [20150629]简单的加密连接.txt
  • [20190113]四校联考