admin管理员组

文章数量:1532330

2024年1月17日发(作者:)

NPAPI的简介

NPAPI全称为:Netscape Plugin Application Programming

Interface (NPAPI), Netscape Navigator 浏览器早已离我们远去,但Netscape plug-in 却还顽强的活着,并且成为绝大多数浏览器都支持的跨平台插件标准,其中最常见的N插件莫过于 Flash 了,想想满世界的类 “Youtube” 你就知道了。 现在 Qt 4.5 中支持了N插件,最直观的改变就是在 Qt Demo Browser 中原本应该显示 Flash

的位置不会再是一片空白了。(这段是抄袭别人的^_^).

现在支持NPAPI的浏览器有,

Epiphany Google Chrome Safari

Konqueror Mozilla project applications, including

Camino Firefox Mozilla Application Suite

Seamonkey Netscape Navigator and Communicator

Opera Internet Explorer up to 5.5SP2

在linux下,必须实现的接口函数

char* NP_GetMIMEDescription()

NPError NP_GetValue()

NPError NP_Initialize()

NPError NP_Shutdown()

我们看看npfunctions.h头文件里面怎么定义这些函数的

#if defined(XP_MACOSX)

typedef void

(*BP_CreatePluginMIMETypesPreferencesFuncPtr)(void);

typedef NPError (*MainFuncPtr)(NPNetscapeFuncs*,

NPPluginFuncs*, NPP_ShutdownProcPtr*);

#endif

#if defined(XP_UNIX)

typedef EXPORTED_CALLBACK(NPError,

NP_InitializeFuncPtr)(NPNetscapeFuncs*, NPPluginFuncs*);

typedef EXPORTED_CALLBACK(char*,

NP_GetMIMEDescriptionFuncPtr)(void);

#elif defined(ANDROID_PLUGINS)

typedef EXPORTED_CALLBACK(NPError,

NP_InitializeFuncPtr)(NPNetscapeFuncs*, NPPluginFuncs*,

JNIEnv *java_environment, jobject application_context);

typedef EXPORTED_CALLBACK(char*,

NP_GetMIMEDescriptionFuncPtr)(void);

#else

typedef EXPORTED_CALLBACK(NPError,

NP_InitializeFuncPtr)(NPNetscapeFuncs*);

#endif

不同的操作系统,用不同的参数.

浏览器开始加载的函数NPError NP_Initialize()

这个函数不同的环境如下:

Windows

#include NPError WINAPI

NP_Initialize(NPNetscapeFuncs *aNPNFuncs)

Unix

#include NPError NP_Initialize(NPNetscapeFuncs

*aNPNFuncs, NPPluginFuncs *aNPPFuncs)

Returns

If successful, the function returns NPERR_NO_ERROR.

If unsuccessful, the plug-in is not loaded and the function

returns an error code. For possible values, see Error Codes

当插件被加载时,浏览器只调用一次这个函数,在这个函数里面保留浏览器的函数指针结构aNPNFuncs,填充插件函数指针结构.

NPAPI 插件

使用HTML和JavaScript开发新扩展是十分容易的事情,不过如果你想在扩展中重用已经开发完成的代码和功能,你可以通过使用NPAPI插件到达目的。NPAPI插件使JavaScript代码能够调用本地二进制代码。

警告

NPAPI 是重型武器,当别的方法无法到达你的目的时,才建议使用。

运行在NPAPI插件中的代码拥有当前用户的全部权限,不能利用Google Chrome

的沙箱技术和其他安全防护技术。 在处理不可信任的输入, 如content scripts和XMLHttpRequest 时,你必须格外小心。

鉴于使用NPAPI可能引入的风险,使用了NPAPI的扩展在提交给web store或者extension gallery 时要经过人工审核。

更多信息

如何开发一个NPAPI插件超出了本文的范畴,具体请参看:Mozilla's NPAPI plugin

reference以获得更多帮助。

如果你已经拥有一个NPAPI插件,通过如下步骤,你的扩展将能够调用它。

1. 在你扩展的文件中加入一个节,描述如何找到你的插件,以及其他一些信息,:

2. {

3. "name": "My extension",

4. ...

5. "plugins": [

6. { "path": "content_", "public": true },

7. { "path": "extension_" }

8. ],

9. ...

}

"path" 属性用于描述如何找到你的插件,路径是相对于manifest文件位置的。 "public" 属性指明是否允许普通页面加载你的插件,默认是false,也就是只有你的扩展才能加载这个插件。

10. 创建一个HTML文件,mime-type为:application/x-my-extension" ,用于加载你的插件。

11.

12.

这个页面可以被后台页面包含,或者任何你扩展会用到的其他页面。如果你的插件的 "public" 属性是true,,你可以通过脚本在页面中直接使用它。

安全注意事项

在你的扩展中包含一个NPAPI插件是一件危险的事情。因为NPAPI插件拥有访问你本地机器的完全权限而不受控制。如果你的插件不够健壮,包含漏洞,黑客可以通过溢出攻击利用漏洞来安装恶意软件到用户的机器。 有鉴于此,请尽可能的避免在扩展中使用NPAPI插件。

将NPAPI的 "public" 属性设置为true,也会增加你扩展受到攻击的可能性。因为这样一来,插件直接暴露给了页面内容,恶意网站能通过页面直接操纵你的插件。有鉴于此,尽量避免将"public"属性设置为true。

NPAPI

NPAPI (或 网景插入式应用程序编程接口)是 十字架平台 插入式 许多使用的建筑学 网浏览器. 它为首先被开发了 网景 开始时的浏览器家庭Netscape

Navigator 2.0,但在其他浏览器随后被实施了包括 Mozilla应用套件, Mozilla

Firefox, 徒步旅行队, 歌剧, Konqueror 并且有些版本 微软 Internet Explorer.

它的成功可以部分归因于它的朴素。 插入式宣称它处理确定 内容类型(即。 “音频或mp3”)通过被暴露的文件信息。 当它装载伴生插入式的浏览器遇到这样内容类型时,为插入式在浏览器内容之内留出空间回报自己然后流出数据对它。 因为它看适合,假如是视觉,音频或否则,插入式负责然后对回报数据。 如此插入式奔跑就地在页之内,与必须发射一种外在应用处理未知的内容类型的更旧的浏览器相对。

API 要求插入式的其中每一实施和暴露作用的一个比较小数字。 有大约15个作用总共为初始化,创造,毁坏和安置插入。 NPAPI也支持写电影脚本,打印,整个银幕的插入,无窗的插入和美满流出。

内容

1 历史

2 写电影脚本的支持

o

2.1 LiveConnect

o

2.2 XPConnect

o

2.3 npruntime

3 NPAPI对有效控制

4 安全

5 普遍的插入

6 参考

7 外部链接

历史

网景插入式功能的起源开始了不内 网景,但在 Adobe系统. 约翰Warnock, CEO Adobe和亚伦Padgett,其中一位主要作者 Acrobat Reader是有希望的Adobe的雏鸟 PDF 文件格式能扮演一个角色在桌面之外。

所以,在网景发布了导航员之后的第一个版本, Padgett和工程师Eshwar

Priyadarshan设法发现方式做PDF每网经验的整体部分。 结果是一生活演示显示对Warnock和 吉姆・克拉克网景的CEO。 在那演示之前,唯一的原文件格

式在网是HTML 页和在他们之内被埋置的图象。 其他文件类型的链接造成用户被提示下载文件,在之后用户可能打开在适当应用程序的文件。 在那演示,然而,当用户点击了链接对PDF文件,文件在浏览器视窗,无缝混和的HTML和PDF消耗量之内立即被打开了。 克拉克激动问谁在网景为综合化提供了支持,只有发现综合化完成,不用网景介入,但与一点 反向工程 网景浏览器。

公司开始以后星期带来什么通认作为“”销售的亚伦的文丐。 当网景准备合并PDF直接地到浏览器里时,并且Adobe从那一定将获取, Padgett提出了一种不同的方法,插入式建筑学。 Adobe工程师Gordon Dow和Nabeel AlShamma最近增加插入式建筑学到Acrobat Reader支持工程师开发努力在读者队外面。

Padgett是那努力的部分,并且他期望那,如果给机会,其他公司(和有希望地合作在Adobe内)将选择扩大网。 克拉克和队在最后被说服了并且衬托设计将支持新的模型的API。 并且,当PDF是先驱时,你可能争辩说,最新插入喜欢 Macromedia闪光, 有效控制和 java附属程序 更改变了网前景。

写电影脚本的支持

插入式scriptability是特点允许Java语言代码在网页与插入式互动。 网景的各种各样的版本Mozilla使用不同的技术然后支持这个特点: LiveConnect、XPConnect和npruntime。

LiveConnect

与网景4, NPAPI被延伸允许插入写电影脚本。 这能力通认 LiveConnect. 插入式能实施和退回事例到a Java 类。 这类暴露的公开方法是scriptable接口为插入式。 类能叫从 Java语言 并且从跑在页之内的其他java附属程序以整理电话在各种各样的上下文之间的浏览器。

LiveConnect的缺点是它在网景浏览器之内沉重被栓了到Java的固定版本。 因为它要求Java写电影脚本插入,这防止了浏览器使用其他Java运行时间,并且增加了大数量膨胀到浏览器下载大小。

另外, LiveConnect是棘手的编程。 开发商必须定义Java类为插入式,通过一个专业Java倒栽跳水编译器跑它和执行当地方法。 处理串、例外和其他Java对象从 C++ 是忧虑和非明显的。 要配制事态LiveConnect使用了一更加早期,并且过时API为祈求当地C++电话从Java现在叫JRI。 JRI技术长期被代替了 JNI.

XPConnect

LiveConnect被证明的极端疑难为Mozilla。 附庸在过时和私有的Java执行时间和JRI API意味LiveConnect从未真正地运作。

Mozilla已经使用 XPCOM 定义接口对在C++实施的许多对象。 每个接口是由定义的 IDL (界面限定语言)通过导致标头文件和一个语言中立类型图书馆是接

口的一个二进制表示法的IDL编译器归档,并且跑。 这双描述了接口、方法、参量、数据结构和列举。

XPConnect 使用类型图书馆信息安排电话区别螺纹上下文之间和在Java语言和当地编写C++之间。 因为XPConnect广泛地使用在Mozilla中,它是极端健壮,支持和很好了解。 开始以网景6.1和Mozilla 0.9.2, NPAPI是延长的,以便插入式能退回一个scriptable接口到本身,并且XPConnect将安排电话对它从Java语言和C++实施。

这去除了Java附庸,然而有问题与XPConnect。 特别是,技术根据XPCOM沉重,是相似的 微软COM. 因而插入式开发商一定熟悉参考计数,接口, IDL等等实施写电影脚本。 另外,附庸在XPCOM导致了某一动态连接发布(即。 易碎的基类问题)哪些必须解决,在插入式正确地与不同的浏览器一起使用之前。 从那以后改变了XPCOM,以便它提供一个静态地连接的版本给地址这样问题。 这种方法也要求一个.xpt文件在DLL旁边安装; 否则插入式意志看上去运作,但写电影脚本不会将,导致混乱。

npruntime

底的2004年,所有主要浏览器公司除了微软同意 npruntime 作为一个引伸对提供写电影脚本的原始的NPAPI,通过是相似的在样式于老C样式NPAPI并且是其他浏览器技术独立象Java或XPCOM的API。

它是支持由新世代Mozilla (1.7.5+)/Firefox、徒步旅行队和歌剧。 所有新的插入应该使用这API。

NPAPI对有效控制

微软被开发的OLE2 (对象链接和嵌入技术)作为方式创造复合文件在应用例如Microsoft Word。 例如文字处理软件文件也许包含可能被发射在文字处理软件窗口之内的一个嵌入报表。 OLE2根据 COM 并且已定义界面为容器和对象需要执行的各种各样的任务。 OLE2控制(有时以OCX著名)是可能被埋置入容器,但的光OLE2对象没有保存很多数据也没有要求菜单或工具栏起作用。

控制被实施了作为DLL并且被装载了入主人容器的地址空间例如 Visual Basic.

Visual Basic的更早的版本使用了叫的相似的技术 Visual Basic引伸但OCX控制看了作为优胜者。 每OCX实施了容器可能使用操作控制,例如改变位置它,或者提供关于容器的信息OLE2接口的一个明确定义的子集。 OCX也实施了

自动化接口 哪些允许它暴露在另一个方向可能被操作和使用的机制射击事件到容器的方法和物产。

OLE2是极端复杂和支持为COM MFC 是穷的。 如此微软合理化规格使它更加简单,并且rebranded技术 ActiveX. 在简单化以后仍然要求控制实施大约6个核心接口。 以回应这复杂,微软使它更加简单的被生产的巫术师、ATL基类、宏指令和C++语言引申写控制。

开始以Internet Explorer 3.0,支持在HTML内容之内增加了到主人有效控制。

如果浏览器遇到页指定有效控制通过对象标记(使用non-W3C句法),它将自动地下载并且安装控制以很少或没有用户干预。 这使网经验“更加富有”,但被察觉如离间(因为控制在窗口只跑了)和安全风险由于缺乏用户干预。 微软被迫介绍安全措施演讲它的缺点。 例如:

控制必须数字式地签字设施包裹(内阁文件和executables)。

控制必须明确地自称安全为写电影脚本。

缺省安全设置变得越来越更加严密。

Internet Explorer维护坏控制黑名单。

Internet Explorer为时间支持NPAPI插入做了。 在网景浏览器也起作用的插入在Internet Explorer起了作用。 这归结于在作为一个定刀片在ActiveX基于浏览器和NPAPI之间插入式的“”文件之内被实施的小有效控制。 IE浏览器将装载控制并且使用它主持在页之内指定的插入。 然而,微软提出NPAPI插入的要求(或API的IE实施)是安全性问题并且投下了支持为他们在版本5.5

SP2。[1]

[2]

[3]

Internet Explorer的将来的版本是可能促进a .NET 基本模型使用沙盒和细颗粒的安全调控什么控制能和不能做。

安全

普遍的误解关于NPAPI技术是插入式比有效控制莫名其妙地固有地安全。 两个跑当地机器指令以特权和主人过程一样。 因而一个恶意插入式罐头造成同样多损害象恶意有效控制。

在NPAPI和ActiveX之间的一个重要区别是NPAPI单一地是为互联网插入,而ActiveX为各种各样的目的使用,包括应用构成在Visual Basic。 一名典型的窗口用户有浩大的大概是被标记的“保险柜为写电影脚本”的有效控制安装,一定数量,但实际上不是安全的。 其中每一个可以用于作为角度推翻用户的计算机。

另一个区别为NPAPI是实施(在之前 Mozilla Firefox看见)没有自动地下面下载也没有安装缺掉插入。 一缺掉插入式造成浏览器显示代表插入式的一个曲线锯的片断。 如果在那点击的用户他们被指挥了到网景的插入式发现者服务,他们可能手工下载和安装插入式为他们自己。 当这是不便的对用户时,它也是一项重要安全措施,因为它使用浏览器防止了内容作为传染媒介为 malware.

在Internet Explorer, HTML内容指定地点,有效控制居住。 如果已经没有安装控制, IE将自动地下载并且安装控制从指定的来源,停留只显示数字签名对用户和获得他们的同意为了设施能开始。 为合法的控制,这提供一个更加效率化的设施机制以最小的用户互作用。 恶意内容能说服用户与聪明 社会工程学 忽略警告(或他们的更好的评断)和安装也许危害他们的保密性或机器的事。 一定数

量 spyware, adware 并且 malware 站点使用这个机制部署可执行的内容到机器。

微软必须为ActiveX增加缺省安全设置和维护恶意控制黑名单为缓和这种风险。

Mozilla Firefox 企图提出中立立场。 如果插入式是缺掉的,它将通知插入式是缺掉的用户并且创始与在主持的一项插入式发现者服务的一个安全连接。 用户能允许Firefox下载和安装插入式。 这个模型防止指定哪里的内容应该下载插入式从-插入式发现者服务。 这使Firefox提出一个相当无缝的设施机制,但是限制服务到被信任的和兼容插入从可靠的来源。 当然这个模型含蓄地信任插入式发现者服务退回“好”插入,增加在主人站点需要的安全。

普遍的插入

Adobe Acrobat

Adobe冲击波

Adobe一刹那球员

Java运行时间环境

RealPlayer

QuickTime

VLC传媒播放装置

Windows Media Player

参考

1. ^ 网景样式插入不在升级Internet Explorer以后运作

2. ^ Giannandrea, J。 (9月4日, 2001) 微软在Windows XP打破网插入.

3. ^ Internet Explorer支持的描述为网景样式插入

外部链接

插入式发展文献 在Mozilla开发商中心

更旧的插入式发展主页

写写电影脚本的插入与Mozilla

有效控制那主人插入 -替换为从Internet Explorer被去除的。

IE竞争者研磨ActiveX选择- CNET

让ActiveX在FireFox和Chrome等NPAPI插件接口的浏览器(不安全)

从这个网址上下载后安装

/p/ff-activex-host/downloads/list

这样firefox浏览器就可以正常浏览有ActiveX插件的网页,比如flash 的ActiveX控件:

id="Control"

TYPE="application/x-itst-activex"

WIDTH="300" HEIGHT="300"

clsid="{D27CDB6E-AE6D-11cf-96B8-444553540000}"

progid="aveFlash"

event_OnReadyStateChange="OnReady"

param_src="/v/53RdNYwImYc">

在Chrome中,需要按如下方式安装,找到ffactivex的安装目录,新建一个“”文本文件,拷贝下列内容后保存:

{

"name": "ActiveX hosting plugin for Firefox",

"version": "1.37.0.0",

"description": "ActiveX hosting plugin for Firefox r37",

"plugins":[{"path": "", "public": true}]

}

在Chrome中点选 扳手 -> 工具 -> 扩展程序

在界面上 点选 载入正在开发的扩展程序

将目录定位到 ffactivex安装目录,确定后即可浏览浏览包含ActiveX插件的网页。

本文标签: 插入式使用浏览器控制插件