簡體   English   中英

.NET Applet和嵌入在IE中的ActiveX控件有什么區別

[英]What is the difference between a .NET Applet and ActiveX control embedded in IE

我在網上看到一些有關.Net小程序的文章,我想知道它與ActiveX控件(使用.Net語言創建)有何不同? (為澄清起見,這與在網絡瀏覽器中運行的小程序有關)

(區別是:用.Net語言編寫的ActiveX控件稱為.Net Applets嗎?)

使用一個相對於另一個有什么優勢嗎?

另外,Microsoft將此技術稱為什么? (在MSDN上進行的搜索不會顯示任何稱為.Net Applets的信息!)

ps:據我所知,ActiveX控件需要進行COM注冊,而.Net小程序則不需要。 另外,在網頁中,activeX控件使用其CLSID進行引用,而.NET小應用程序似乎由全名(路徑,dll名稱,名稱空間和類)進行引用。

ActiveX控件僅僅是COM對象,至少可以實現IUnknown。 IE的最新版本也開始要求該對象實現IObjectSafety。 為了做任何有用的事情,該對象還需要實現其他一些Ole接口,例如IDispatch,IOleObject等。該對象需要通過CoCreateInstance()可創建,這意味着您必須以某種方式在注冊表中注冊它。 您不必在標記中使用Guid,如果您注冊了一個,也可以使用AppId

您還可以編寫一些托管代碼,並使其在IE中運行。 有效的方法是CLR在安裝時注冊MIME過濾器 然后,當IE看到您正在發送正確的MIME類型的東西時,它將代碼交給CLR處理。 CLR會在僅授予Internet權限的范圍內對代碼進行沙箱處理,因此它無法完成框架公開的所有內容。 您必須檢查特定的文檔,以了解在此安全區域中可以做什么和不能做什么。

權衡取舍:

易於安裝:ActiveX控件要求您將所有內容打包成一個.CAB文件和一個.INI文件,該文件以相當隱秘的方式描述了安裝要求。 如果必須在模塊(例如ATL / MFC dll或其他第三方模塊)中安裝其他依賴項,則將變得非常棘手。 使用.net模塊,您只需使用正確的MIME類型將其發送出去,但是您必須確保用戶具有正確的框架版本(可以通過網站上的用戶代理字符串進行檢查)。

安全性:ActiveX控件只是在用戶系統上運行的本機代碼,因此從理論上講,它們可以執行所需的任何操作。 實際上,LoRIE在很多情況下都限制了它,您必須做一堆特殊的事情,例如注冊表和文件系統訪問(請參閱了解和在保護模式下工作 )。

線程化:由於ActiveX控件在瀏覽器的UI線程上運行,因此您必須確保不要對該線程進行長時間的阻塞操作,因此必須自己進行線程化。 如果長時間的阻止操作操縱了DOM,則您必須使用GIT或COM編組功能自行編組IHTMLxxx接口。 我不確定.net applet是否在瀏覽器的UI線程上運行,但是我確定在C#中更容易處理。

瀏覽器對象:如果要在托管擴展中使用IE / Shell對象,則大多數時候您必須自己編寫互操作程序,因為Framework不能很好地將這些接口包裝在托管對象中。 請參閱http://pinvoke.net,以獲取有關入門的幫助。

兼容性:在同一過程中托管不同版本的運行時存在問題。 直到最近還完全不可能,但是我認為3.x版本在某種程度上已經開始成為可能。 結果是,如果您以.net 2.0為目標,而其他人已經將.net 1.0作為其瀏覽器擴展的一部分加載,則您會迷失方向。 通常,IE和Windows Shell不支持托管擴展。 .net應用程序MIME過濾器內容可能是一個明顯的例外,但請注意可能存在潛在問題。

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

實際上,.NET程序集可以托管在各種應用程序中。 看到:

為.NET公共語言運行時創建主機

ActiveX控件沒有與.NET小程序相同的安全限制,根據您想做什么可能是有利還是不利。 .NET applet通常更易於開發,使用VB6或C ++創建的ActiveX。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM