从Internet上下载ActiveX: 本章中介绍的大部分HTML标记的作用是很明显的,浏览器看到标记后就把标记的要求显示出来。整个过程简单易懂。但是ActiveX 标记却相当不简单。当浏览器看到一个 标记后会发生什么事? 我们知道它不会只是简单地在屏幕绘制控件──ActiveX控件提供了比这多得多的功能。
Microsoft已作出了一个新的Windows API 调用供浏览器使用棗CoGetClassObjectFromURL。当浏览器看到一个 < OBJECT> 标记时,它先分析出CLASSID 、CODEBASE 和_Version 参数,并把这些参数传送给CoGetClassObjectFromURL。如有必要,这个API可以来完成控件的下载、验证和安装。这个API调用做的第一步,是检查当前注册表中是否包含着对CLASSID的引用。你可以在注册表的HKEY_CLASSES_ROOT|CLSID关键字中找到这一引用。如图8.10所示。
WEB链接 关于标记的规范及其相联系的API调用处于经常变动之中,若想得到有关标记的最新信息,请参看http://www. w3.org/TR/WD-object.html。
如果CoGetClassObjectFromURL找到了安装在客户上的ActiveX控件的实例,它就检查其版本号。当安装在客户机上的控件版本号大于等于HTML页上指出的版本号时,CoGetClassObjectFromURL就装载本地控件,而不再从Internet上下载这个控件。控件装载完后,CoGetClassObjectFromURL就为它创建一个类工厂(Class Factory),并把类工厂传送回浏览器(一个类工厂和其它工厂一样工作,它产生出一些项,在上述情况下,它允许浏览器产生对象的一个实例)。否则,API 调用就请求浏览器从Internet站点下载代码。
下载是一个异步处理过程──Windows等待下载完成的过程中能完成其它与ActiveX有关的任务。一旦浏览器完成下载并在必要时解压缩后,就调用Windows 信任提供者服务函数WinVerifyTrust。这个服务到ActiveX 控件内部检查并确定是否有签名块。签名块包含有作者姓名、公开密钥以及控件内容加密摘要等。可以把ActiveX 控件签名块看成是支票的签名、驾驶执照或一份合约,它不仅指出你是谁,而且还验证你是不是你说的你是谁(you are who you sayyou are)。若WinVerifyTrust 调用找到了一个签名块(也称为证书),它就对证书进行证实。每个证书能够包含一个父证书的名称。WinVerifyTrust沿着证书的分层树上溯直至到达根证书。然后它就在可信任的根证书列表中找这份根证书。若能找到,CoGetClassObjectFromURL自动地装入控件并为它创建一个类工厂。否则,用户就会收到一条该控件不可信的消息(当我们在第10章中创建一个ActiveX控件并在Web页中使用时你会看到这一消息的)。
注 公开密钥的作用如同共用房屋或公寓的 安全门钥匙──它使你能进入大楼。私有密钥则如同公用房屋或公寓的室门钥匙──它使你进入你的起居室。
即使一个 ActiveX 控件不出现在可信任的列表中,用户仍可选择是否安装这个ActiveX控件。若选择安装这个控件,用户就会被问及是否想把控件作者添加到他们的信任列表中去。向列表添加作者姓名,意味着同一作者的任一新控件将会立即得到承认。我们将在第十四章中更详细地讨论 安全问题。
这些控件安装在什么地方呢? 理论上,控件设计者可以把控件放在任何位置。但是,大部分从Internet下载的ActiveX控件,都不会自动地出现在用户的类似System (系统)文件夹这样的地方。实际上,它们被添加到名为OCCACHE的一个特殊文件夹中,这个文件夹可以出现在用户机器的任何位置。通常你可以在 Windows 主文件夹、/SYSTEM 文件夹或用户的Internet文件夹中找到这个文件夹。(一些浏览器还使用ActiveX Control Cache文件夹,它位于存放ActiveX控件的Window主文件夹中)。
注 可以找到从Internet上下载的ActiveX控件的最普遍的位置是OCCAHE文件夹。
装入控件还不是工作的全部,控件在安装过程中还要对自身进行注册。在大多数情况下,这意味着要调用DllRegisterServer API 函数。完成安装及注册后,CoGetClassObjectFromURL 函数把与控件相联系的类工厂传回浏览器。浏览器使用类工厂创建一个对象实例,并对标记传送的参数进行初始化,(必要的话)将控件显示到屏幕上。
ActiveX与Netscape Navigator
如果你管理着一个内部网站点,你总是能控制让谁访问站点以及它们应该用什么浏览器来进行访问。这时,如果想使用ActiveX,那么,你就只需要简单地要求每个人都使用Internet Explorer就可以了。但是,对于Internet站点来说却做不到这一点。所以就不得不确保站点支持尽可能多的浏览器。InternetExplorer直接支持ActiveX,而Netscape Navigator却不是这样。幸运地是,有一种可供选择的办法使ActiveX 可以在这样的环境中工作。
NCompass Labs,Inc.公司生产了一种称为ScriptActive的插件,它允许使用Netscape Navigator 3.0看到含有ActiveX控件的HTML页。在写本书时,NCompass的插件和Internet Explorer 3.0的ActiveX控件在能力上是类似的。在使用这个插件之前,可能需要花些时间研究一下它。NCompass在http: //www.ncompasslabs.com/为ScriptActive(及其它产品)提供支持。
不幸的是,使用当前版本的ScriptActive不太简单。你不得不操作标记的一些特殊格式来让它工作。还算幸运,这个插件中还包含有可以完成大部分工作的HTML转换实用程序,名称是NConvert。程序列表8.7显示的是使用这个实用程序创建标准的ActiveMovie控件所产生的结果。
警告 一旦从一个特定的标记向一个标记和 标记组合的转换,就不要通过单击HTML页上邻接元素的标记来编辑ActiveX 控件。在某些情况下,编辑器会改变标记,使之不能正常工作。最好创建自己的Web页,并在Internet Explorer中测试它,然后添加所需的标记,使它通过NCompassScriptActive插件来进行工作。
请注意,NConvert采纳了 标记的信息并在同一信息上添加一个< EMBED> 标记。Navigator能识别出 标记是要向插件中传达某种信息,插件用ScriptActive完成它的工作。因为Internet Explorer不能理解上下文中的标记,多出来的这些信息不引起任何问题。这一部分额外的代码的(存在)理由是相当明显的。ScriptActive插件需要一个特殊的TYPE属性,使用它指定对象的因特网MIME类型。根据供货商的说法,ScriptActive将来的版本中不再需要这一附加信息,并且能够不加修改地使用标记。
技巧 一旦NCompass ScriptActive插件安装成功,用右键单击文件时,就会看到 NConvert 关联菜单项,这个项包含两个选项:NConvert (转换)和 Set Destination Folder(目的文件夹设置)。使用SetDestination Folder这个选项,可以告诉实用程序,你想把转换过的文件放于何处,如果不想用转换过的文件复盖原来的文件,那么,就要指定一个特殊目录。Convert选项的作用是插入产品的当前版本所需的所有标记。
ScriptActive还支持VBScript,但是它是通过添加一个外部的AXS文件来实现的。一定要保证AXS文件与包含VBSCript的HTML文件在同一个目录中。NConvert 添加一些JavaScript行,从而建立Navigator和ScriptActive之间的联系。ScriptActive收到请求后,就在AXS文件中寻找合适的VBScript代码。不幸地是,ScriptActive 对VBscript 的支持相当有限,在使 AXS 文件工作之前,请对这个文件中的VBScript代码进行再加工。如果计划在一个站点上同时使用Internet Explorer 和Navigator,那么,最好的方法是优先使用JavaScript而尽量避免使用VBScript。
使用ScriptActive带来的另一个问题是,它不能总是让你访问与对象相联系的属性。事实上,支持的级别甚至会随机器而变,具有相同配置且使用相同硬件的两台机器,在一个具体的Web页上,也可能显示出不同的结果。不同的控件看起来也提供可变化的访问级别,复杂的控件往往比简单的控件出的问题更多。考虑到Internet处于不断变化之中且ActiveX技术相对比较年轻,出现这些问题也不值得大惊小怪。你能够期盼获得的最好结果是显示控件于屏幕,至于它能不能实际工作则是另一回事了。
尽管存在这些问题,使用ActiveX控件的前途是太光明了,不允许忽视它。类似于ScriptActive的第三方厂商的插件,差不多是在Web站点上能够使用ActiveX的唯一途径,并且仍能保证访问站点的大多数人,能够实实在在地看到你所提供的内容。有传言说,Netscape Navigator的下一版将直接支持ActiveX,但在今天,ScriptActive依然是你最好的解决方案。
Microsoft已作出了一个新的Windows API 调用供浏览器使用棗CoGetClassObjectFromURL。当浏览器看到一个 < OBJECT> 标记时,它先分析出CLASSID 、CODEBASE 和_Version 参数,并把这些参数传送给CoGetClassObjectFromURL。如有必要,这个API可以来完成控件的下载、验证和安装。这个API调用做的第一步,是检查当前注册表中是否包含着对CLASSID的引用。你可以在注册表的HKEY_CLASSES_ROOT|CLSID关键字中找到这一引用。如图8.10所示。
WEB链接 关于标记的规范及其相联系的API调用处于经常变动之中,若想得到有关标记的最新信息,请参看http://www. w3.org/TR/WD-object.html。
如果CoGetClassObjectFromURL找到了安装在客户上的ActiveX控件的实例,它就检查其版本号。当安装在客户机上的控件版本号大于等于HTML页上指出的版本号时,CoGetClassObjectFromURL就装载本地控件,而不再从Internet上下载这个控件。控件装载完后,CoGetClassObjectFromURL就为它创建一个类工厂(Class Factory),并把类工厂传送回浏览器(一个类工厂和其它工厂一样工作,它产生出一些项,在上述情况下,它允许浏览器产生对象的一个实例)。否则,API 调用就请求浏览器从Internet站点下载代码。
下载是一个异步处理过程──Windows等待下载完成的过程中能完成其它与ActiveX有关的任务。一旦浏览器完成下载并在必要时解压缩后,就调用Windows 信任提供者服务函数WinVerifyTrust。这个服务到ActiveX 控件内部检查并确定是否有签名块。签名块包含有作者姓名、公开密钥以及控件内容加密摘要等。可以把ActiveX 控件签名块看成是支票的签名、驾驶执照或一份合约,它不仅指出你是谁,而且还验证你是不是你说的你是谁(you are who you sayyou are)。若WinVerifyTrust 调用找到了一个签名块(也称为证书),它就对证书进行证实。每个证书能够包含一个父证书的名称。WinVerifyTrust沿着证书的分层树上溯直至到达根证书。然后它就在可信任的根证书列表中找这份根证书。若能找到,CoGetClassObjectFromURL自动地装入控件并为它创建一个类工厂。否则,用户就会收到一条该控件不可信的消息(当我们在第10章中创建一个ActiveX控件并在Web页中使用时你会看到这一消息的)。
注 公开密钥的作用如同共用房屋或公寓的 安全门钥匙──它使你能进入大楼。私有密钥则如同公用房屋或公寓的室门钥匙──它使你进入你的起居室。
即使一个 ActiveX 控件不出现在可信任的列表中,用户仍可选择是否安装这个ActiveX控件。若选择安装这个控件,用户就会被问及是否想把控件作者添加到他们的信任列表中去。向列表添加作者姓名,意味着同一作者的任一新控件将会立即得到承认。我们将在第十四章中更详细地讨论 安全问题。
这些控件安装在什么地方呢? 理论上,控件设计者可以把控件放在任何位置。但是,大部分从Internet下载的ActiveX控件,都不会自动地出现在用户的类似System (系统)文件夹这样的地方。实际上,它们被添加到名为OCCACHE的一个特殊文件夹中,这个文件夹可以出现在用户机器的任何位置。通常你可以在 Windows 主文件夹、/SYSTEM 文件夹或用户的Internet文件夹中找到这个文件夹。(一些浏览器还使用ActiveX Control Cache文件夹,它位于存放ActiveX控件的Window主文件夹中)。
注 可以找到从Internet上下载的ActiveX控件的最普遍的位置是OCCAHE文件夹。
装入控件还不是工作的全部,控件在安装过程中还要对自身进行注册。在大多数情况下,这意味着要调用DllRegisterServer API 函数。完成安装及注册后,CoGetClassObjectFromURL 函数把与控件相联系的类工厂传回浏览器。浏览器使用类工厂创建一个对象实例,并对标记传送的参数进行初始化,(必要的话)将控件显示到屏幕上。
ActiveX与Netscape Navigator
如果你管理着一个内部网站点,你总是能控制让谁访问站点以及它们应该用什么浏览器来进行访问。这时,如果想使用ActiveX,那么,你就只需要简单地要求每个人都使用Internet Explorer就可以了。但是,对于Internet站点来说却做不到这一点。所以就不得不确保站点支持尽可能多的浏览器。InternetExplorer直接支持ActiveX,而Netscape Navigator却不是这样。幸运地是,有一种可供选择的办法使ActiveX 可以在这样的环境中工作。
NCompass Labs,Inc.公司生产了一种称为ScriptActive的插件,它允许使用Netscape Navigator 3.0看到含有ActiveX控件的HTML页。在写本书时,NCompass的插件和Internet Explorer 3.0的ActiveX控件在能力上是类似的。在使用这个插件之前,可能需要花些时间研究一下它。NCompass在http: //www.ncompasslabs.com/为ScriptActive(及其它产品)提供支持。
不幸的是,使用当前版本的ScriptActive不太简单。你不得不操作标记的一些特殊格式来让它工作。还算幸运,这个插件中还包含有可以完成大部分工作的HTML转换实用程序,名称是NConvert。程序列表8.7显示的是使用这个实用程序创建标准的ActiveMovie控件所产生的结果。
警告 一旦从一个特定的标记向一个标记和 标记组合的转换,就不要通过单击HTML页上邻接元素的标记来编辑ActiveX 控件。在某些情况下,编辑器会改变标记,使之不能正常工作。最好创建自己的Web页,并在Internet Explorer中测试它,然后添加所需的标记,使它通过NCompassScriptActive插件来进行工作。
请注意,NConvert采纳了 标记的信息并在同一信息上添加一个< EMBED> 标记。Navigator能识别出 标记是要向插件中传达某种信息,插件用ScriptActive完成它的工作。因为Internet Explorer不能理解上下文中的标记,多出来的这些信息不引起任何问题。这一部分额外的代码的(存在)理由是相当明显的。ScriptActive插件需要一个特殊的TYPE属性,使用它指定对象的因特网MIME类型。根据供货商的说法,ScriptActive将来的版本中不再需要这一附加信息,并且能够不加修改地使用标记。
技巧 一旦NCompass ScriptActive插件安装成功,用右键单击文件时,就会看到 NConvert 关联菜单项,这个项包含两个选项:NConvert (转换)和 Set Destination Folder(目的文件夹设置)。使用SetDestination Folder这个选项,可以告诉实用程序,你想把转换过的文件放于何处,如果不想用转换过的文件复盖原来的文件,那么,就要指定一个特殊目录。Convert选项的作用是插入产品的当前版本所需的所有标记。
ScriptActive还支持VBScript,但是它是通过添加一个外部的AXS文件来实现的。一定要保证AXS文件与包含VBSCript的HTML文件在同一个目录中。NConvert 添加一些JavaScript行,从而建立Navigator和ScriptActive之间的联系。ScriptActive收到请求后,就在AXS文件中寻找合适的VBScript代码。不幸地是,ScriptActive 对VBscript 的支持相当有限,在使 AXS 文件工作之前,请对这个文件中的VBScript代码进行再加工。如果计划在一个站点上同时使用Internet Explorer 和Navigator,那么,最好的方法是优先使用JavaScript而尽量避免使用VBScript。
使用ScriptActive带来的另一个问题是,它不能总是让你访问与对象相联系的属性。事实上,支持的级别甚至会随机器而变,具有相同配置且使用相同硬件的两台机器,在一个具体的Web页上,也可能显示出不同的结果。不同的控件看起来也提供可变化的访问级别,复杂的控件往往比简单的控件出的问题更多。考虑到Internet处于不断变化之中且ActiveX技术相对比较年轻,出现这些问题也不值得大惊小怪。你能够期盼获得的最好结果是显示控件于屏幕,至于它能不能实际工作则是另一回事了。
尽管存在这些问题,使用ActiveX控件的前途是太光明了,不允许忽视它。类似于ScriptActive的第三方厂商的插件,差不多是在Web站点上能够使用ActiveX的唯一途径,并且仍能保证访问站点的大多数人,能够实实在在地看到你所提供的内容。有传言说,Netscape Navigator的下一版将直接支持ActiveX,但在今天,ScriptActive依然是你最好的解决方案。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-123255/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-123255/