浏览器控件开发
一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题。在有特殊需求(如涉及数据安全的金融业务数据交互、需插件才能实现的与本地设备的交互等)的情况下可以酌情慎用。
浏览器插件总体可以划分为两大阵营,即IE支持的插件以及非IE支持的插件。本来在Netscape时代,对于浏览器插件是有公用的规范的(NPAPI),一开始所有浏览器都支持该规范,包括IE。后来出于商业原因,微软的IE不再支持NPAPI,改而自己开发了一套基于COM的ActiveX体系,但这个体系对于非IE浏览器是拒绝支持的。所以目前的状况基本是,IE浏览器仅支持ActiveX控件,而Firefox、Chrome等浏览器只支持另一类接口(XPCOM或NPAPI)。要想实现一个Web插件,至少需要同时考虑IE支持的AceiveX版以及非IE支持的Plugin版(Flash等插件对于IE与非IE浏览器都是不同的)。
ActiveX的开发可以用C#、VB及C++等语言。用C++开发ActiveX既可以使用ATL,也可以使用MFC。ATL ActiveX输出文件较小,适合网络传输,但开发复杂度稍大;而MFC ActiveX输出文件稍大(附带必要的MFC dll),但易于上手。本文主要介绍基于MFC的ActiveX开发。
一、创建项目
1. 在VS2010中,新建一个MFC ActiveX Control项目:WebOffice
2. 点击 确定 后一路 下一步 直到 【控件设置】,设置后点击 完成
3. 右击项目名称,选择属性弹出项目属性页。
修改配置属性->常规->MFC的使用为”在静态库中使用MFC”以便编译时将MFC相关库自动和控件一起打包。
修改配置属性->链接器->注册输出为”否”以便编译后不会自动注册插件。
注意:创建MFC ActiveX Control时已经自动给项目添加了.def文件并做好了相应关联。若对配置信息更改后导致编译的ocx注册不成功或提示找不到EntryPoint,可以检查一下“链接器->输入->模块定义文件”是否配置正确,正常情况下已经自动配置好了,如下图:
二、在HTML中使用插件
经过上面的步骤,已经创建了一个最简单的ActiveX控件,接下来可以把这控件应用在HTML页面中查看效果
1. 在项目中打开项目名.idl 文件,拉到文件最下面,查找控件的classid。
2. 新建HTML文件 demo.html,把下面的代码复制到HTML文件中。
代码块语法遵循标准markdown代码,例如:
<object width="1300" height="768" id="WebOffice" classid="clsid:5884D1D2-022C-4D6E-9FDC-8AF539F09912">
<param name="_ExtentX" value="6350" />
<param name="_ExtentY" value="6350" />
</object>
3. 新建文件 weboffice.bat,把下面的代码复制进去并保存,用于注册插件。
regsvr32 WebOffice.ocx /s
4. 将文件weboffice.bat、demo.html、WebOffice.ocx复制到同一个目录中。
1. 双击 weboffice.bat注册插件
2. 用IE打开demo.html,可以看到插件的效果