我在网上看到一些关于.Net applets的文章,我想知道它与activex控件(使用.Net语言创建)有何不同?(澄清一下,这是关于在Web浏览器中运行的applet)
(区别是:用.Net语言编写的ActiveX控件叫做.Net Applets吗?)
使用一个优于另一个有什么优势吗?
此外,Microsoft将此技术引用为什么?(在MSDN上搜索不会带来任何名为.Net Applets的东西!)
ps:从我所看到的ActiveX控件需要COM注册,而.Net applets不.此外,在Web页面中,使用其CLSID引用activeX控件,而.NET applet似乎由全名(路径,DLL名称,名称空间和类)引用
ActiveX控件只是COM对象,至少可以实现IUnknown.最新版本的IE已经开始要求该对象实现IObjectSafety.要做任何有用的事情,对象还需要实现一些其他Ole接口,例如IDispatch,IOleObject等.对象需要通过CoCreateInstance()创建,这意味着你必须以某种方式注册它.您不必在标签中使用guid,如果您注册了一个,也可以使用AppId.
您还可以编写一些托管代码,并在IE中运行.可行的方法是CLR 在安装时注册MIME过滤器.然后,当IE看到你正在发送一些正确的mime类型时,它会将代码交给CLR来处理.CLR对代码进行沙箱处理,使其仅被授予Internet权限,因此无法执行框架公开的所有操作.您必须检查特定文档,了解在此安全区域中可以执行和不可执行的操作.
一些权衡:
易于安装:ActiveX控件要求您将所有内容打包到带有.INI文件的.CAB文件中,该文件以相当神秘的方式描述安装要求.如果您必须在模块中安装其他依赖项(例如ATL/MFC dll或其他第三方模块),那将非常棘手.使用.net模块,您只需使用正确的MIME类型发送它,但您必须确保您的用户拥有正确的框架版本(您可以通过网站上的用户代理字符串进行检查).
安全性:ActiveX控件只是在用户系统上运行的本机代码,因此理论上它们可以做任何他们想做的事情.在实践中,LoRIE在很多情况下限制它,你必须做一些特殊的外壳,如注册表和文件系统访问(请参阅了解和在保护模式下工作).
线程:由于ActiveX控件在浏览器UI线程上运行,因此您必须确保不对该线程执行长时间的阻塞操作,因此您必须自己进行线程处理.如果长时间阻塞操作操纵DOM,则必须使用GIT或COM编组功能自行编组IHTMLxxx接口.我不确定.net小程序是否在浏览器UI线程上运行,但是在C#中处理起来我更加容易.
浏览器对象:如果要在托管扩展中使用IE/Shell对象,则必须在大多数时间自己编写互操作,因为框架不能很好地将这些接口包装在托管对象中.请访问http://pinvoke.net以获得一些帮助.
兼容性:在同一进程中托管不同版本的运行时存在问题.直到最近它根本不可能,但我认为3.x版本已经开始在一定程度上成为可能.结果是如果你的目标.net 2.0和其他人已经加载.net 1.0作为他们的浏览器扩展的一部分,你输了.通常,IE和Windows Shell不支持托管扩展.这个.net应用程序MIME过滤器的东西可能是一个值得注意的例外,但请注意可能存在潜在问题.