开发附带NPAPI插件的Chrome扩展

本文详述了如何开发一个基于NPAPI插件的Chrome扩展。首先介绍了NPAPI的历史和准备工作,包括从Firefox源代码中获取NPAPI相关文件。接着,通过VS2003创建并编译NPAPI插件,实现JavaScript调用插件功能。然后,开始编写Chrome扩展,包括manifest.json、background.html和background.js,使扩展能够调用NPAPI插件并在右键菜单中显示“sayHello”功能。最后,指导了扩展的安装、测试和发布流程。
摘要由CSDN通过智能技术生成


1     NPAPI
插件

1.1   NPAPI简介

NPAPI(Netscape Plugin Application Programming Interface,网景插件应用程序接口)是网景公司当年制定的开发基于网景浏览器,用于在浏览器中执行外部应用程序的通用接口。该接口基于插件机制,制定了一系列的标准和API,因此也有NPAPI插件一说。同期的微软,也在IE中支持ActiveX为浏览器插件,不得不承认微软在这一点上,把浏览器和OS结合的更为紧密,这也可能是当年微软能够击溃网景的原因之一。

但网景的影响深远,除了微软特立独行之外,其他浏览器开发厂商奇迹般的都一致采用了NPAPI来对浏览器进行扩展(这包括后来从灰烬中重生的FireFox及新生的Chrome;当然,Chrome在不久前时间已经在尝试抛弃NPAPI了)。因此,在目前来看NPAPI几乎是IE之外的浏览器插件开发的统一标准。

1.2   准备工作

根据参考资料,从ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/4.0.1/source/中下载了firefox早期的源代码,并从中抠出了NPAPI相关的部分(恩,资料上说的不够详细)。

解压源代码,把modules\plugin\base\public和modules\plugin\sdk\samples\include两个目录中的文件复制出来放在一起(我创建了D:\npapi,把文件都放这了)。

另外,资料里提到的三个文件在modules\plugin\sdk\samples\common下(记住位置,待会会用到)。

1.3   创建插件

顺便提一下,本文以VS2003为范例。

插件实现的功能:对浏览器(贴切点说是对javascript引擎)暴露对象Sample,而Sample又提供了一个sayHello的方法。这样一来,我们可以在浏览器中,使用javascript通过Sample.sayHello();来调用插件所提供的功能。

1.3.1     创建Win32 DLL工程

1.3.2     引入NPAPI库

在工程属性中,添加“附加包含目录”:D:\npapi(之前抠出来的部分)。

1.3.3     添加宏定义_X86_

1.3.4     添加模块定义文件(.def文件)

创建sample.def文件,内容为:

LIBRARY"sample"

EXPORTS

NP_GetEntryPoints              @1

NP_Initialize                @2

NP_Shutdown               @3

1.3.5     编辑stdafx.h文件

增加tchar头文件的引入:

#include<tchar.h>

增加NPAPI头文件的引入:

//Mozilla-API

#include<npfunctions.h>

#include<npruntime.h>

#include"npruntime.h"

1.3.6     添加基础框架文件

找到np_entry.cpp、npn_gate.cpp和npp_gate.cpp,复制到工程目录下,并添加到工程(恩恩,位置在modules\plugin\sdk\samples\common)。

在编辑器里分别打开着三个文件,并在文件头部加入:

#include"stdafx.h"

1.3.7     编辑sample.cpp文件

将文件代码修改为:

#include"stdafx.h"

#include"sample.h"

 

NPErrorNS_PluginInitialize()

{

       return NPERR_NO_ERROR;

}

 

voidNS_PluginShutdown()

{

}

 

nsPluginInstanceBase* NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct)

{

       if(!aCreateDataStruct)

              return NULL;

 

       CPlugin* plugin = newCPlugin(aCreateDataStruct->instance);

 

       return plugin;

}

 

voidNS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin)

{

       if(aPlugin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值