什么是浏览器插件
浏览器插件其实就是一个动态库,它被浏览器动态地加载。浏览器插件可以用来扩充浏览器的功能,比如:
- 多媒体的表现能力,例如Flash Player插件用来在网页上播放视频
- 保护用户信息安全,例如网上银行的插件,提供交易安全保证
在浏览器地址栏输入如下命令,可以查看你的浏览器都安装了哪些插件:
Firefox下:
about:plugins
,Chrome下:
chrome://plugins
FireFox会把系统里的安装的Plugins全部列出来,而且还列出了插件对应的动态库文件名,版本,特别需要注意的是插件支持的MIME Type,这个浏览器决定加载某个插件的重要依据,后文会继续解释。
什么是NPAPI
NPAPI(Netscape Plugin Application Programming Interface )是Mozilla公司提出的一套开发浏览器插件的API接口。(世界上最早的浏览器就是Mozilla开发的Netscape,虽然它后来被IE给打败了)。现在大部分浏览器都兼容这个接口,例如Chrome,Safari,FireFox, Opera,因而如果基于NPAPI开发的插件可以跨浏览器,IE除外。当然微软也搞了一套自己的接口,那就是ActiveX。Google在Chrome中也另搞了一套API:Pepper API,当然Chrome还是兼容NPAPI的。
NPAPI是一套C/C++的开发接口。基于NPAPI开发的插件可以实现如下功能:
- 注册插件能够处理的MIME类型
- 在浏览器窗口内显示插件所要显示的内容
- 收到和处理键盘/鼠标事件
- 通过URL从网络获取数据
- 使用URL的形式发布插件产生的数据
- 提供网页Javascipt代码可以调用的API接口,让网页JS代码调用插件的C/C++代码;插件也可以通过调用Javascript代码来操作DOM
插件是如何被加载的
当浏览器启动的时候,它会去系统的固定的目录中搜索所有的动态库读取动态库资源中的关于MIME类型部分,同时把这个MIME类型和对应的动态库在内存中缓存起来。
当用户在浏览器中打开某个html页面时,如果它检测到了一个