嵌入在IE中的.NET Applet和ActiveX控件之间有什么区别

时间:2009-05-01 15:27:02

标签: .net internet-explorer activex applet

我在网上看到一些关于.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名称,名称空间和类)引用

3 个答案:

答案 0 :(得分:6)

ActiveX控件只是COM对象,至少可以实现IUnknown。最新版本的IE已经开始要求该对象实现IObjectSafety。要做任何有用的事情,该对象也需要实现一些其他Ole接口,例如IDispatch,IOleObject等。该对象需要通过CoCreateInstance()创建,这意味着你必须在某些部分register与注册表的方式。您不必在标签中使用guid,如果您注册了标签,也可以使用AppId

您也可以编写一些托管代码,并在IE中运行。有效的方法是CLR在安装时注册MIME filter。然后,当IE看到你正在发送一些正确的mime类型时,它会将代码交给CLR来处理。 CLR对代码进行沙箱处理,使其仅被授予Internet权限,因此无法执行框架公开的所有操作。您必须检查特定文档,了解在此安全区域中可以执行和不可执行的操作。

一些权衡:

易于安装:ActiveX控件要求您将所有内容打包到带有.INI文件的.CAB文件中,该文件以相当神秘的方式描述安装要求。如果您必须在模块中安装其他依赖项(例如ATL / MFC dll或其他第三方模块),那将非常棘手。使用.net模块,您只需使用正确的MIME类型发送它,但您必须确保您的用户拥有正确的框架版本(您可以通过网站上的用户代理字符串进行检查)。

安全性:ActiveX控件只是在用户系统上运行的本机代码,因此理论上它们可以做任何他们想做的事情。在实践中,LoRIE在很多情况下限制它,你必须做一些特殊的大量内容,比如注册表和文件系统访问(参见Understanding and Working in Protected Mode)。

线程:由于ActiveX控件在浏览器UI线程上运行,因此您必须确保不对该线程执行长时间的阻塞操作,因此您必须自己进行线程处理。如果您的长阻塞操作操纵DOM,您必须自己使用the GIT或COM编组functions来编组IHTMLxxx接口。我不确定.net applets是否在浏览器UI线程上运行,但是在C#中更容易处理我确定。

浏览器对象:如果要在托管扩展中使用IE / Shell对象,则必须在大多数时间自己编写互操作,因为框架不能很好地将这些接口包装在托管对象中。请参阅http://pinvoke.net以获得一些帮助。

兼容性:在同一进程中托管不同版本的运行时存在问题。直到最近它根本不可能,但我认为3.x版本已经开始在一定程度上成为可能。结果是如果你的目标.net 2.0和其他人已经加载.net 1.0作为他们的浏览器扩展的一部分,你输了。通常,IE和Windows Shell不支持托管扩展。这个.net app MIME过滤器可能是一个值得注意的例外,但要注意可能存在潜在问题。

答案 1 :(得分:1)

“ActiveX控件(使用.Net语言创建)”和“.NET applet”都是“在IE中托管的.NET程序集”的俚语。

事实上,.NET程序集可以托管在各种应用程序中。参见:

Creating a Host to the .NET Common Language Runtime

答案 2 :(得分:0)

ActiveX控件与.NET applet没有相同的安全限制,这可能是一个优点或缺点,具体取决于您要执行的操作。 .NET applet通常更容易开发,使用VB6或C ++创建的ActiveX。