高手解釋一下瀏覽時遇到的Java、ActiveX、Scripts我用的GB瀏覽器,它有三個選項是是否允許下載:Java、ActiveX、Scripts。能否回答我,如果分別禁止下載,網頁會有哪些東西顯示不了?

熱心網友

網絡瀏覽的控件很多,使用一個體系(IE和GB通用)如果你想真正了解得話 僅僅知道Java、ActiveX、Scripts是不行的所以我轉貼一文 你仔細看看 會很有收獲的(自然也會弄懂Java、ActiveX、Scripts的)體系結構概覽   Internet Explorer 使用 Microsoft ActiveX 控件和 Active Document 接口來連接各個組件。下圖提供了一個高層的概覽: IExplore。exe 在最上層;它是一個在 Internet Explorer 加載時被實例化的一個小應用程序。這個可執行的應用程序使用 Internet Explorer 來完成瀏覽、歷史維護、收藏夾維護、HTML 語法分析和翻譯等,同時它為獨立的瀏覽器提供工具欄和框架。IExplorer。exe 直接引用 Shdocvw。dll 組件。   然后 Shdocvw。dll 引用 Mshtml。dll 組件,當用戶瀏覽到特定的類型的文檔時,他還可以引用其它可以加載到瀏覽其中的 Active Document 組件 (如 Microsoft Office 應用程序)。Shdocvw。dll 提供與瀏覽、內置連接、收藏家和歷史管理以及圖形支持相關的功能。這個DLL 也向它的宿主提供接口以便可以像一個 ActiveX 控件一樣被單獨引用。Shdocvw。dll 組件更經常作為 WebBrowser 控件被引用。內置連接是指點擊已加載文檔中的 HTML 鏈接,然后在 WebBrowser 控件的同一實例中加載一個新的 HTML 文檔的能力。如果只引用了 Mshtml。dll,點擊鏈接導致新的瀏覽器實例產生。   Mshtml。dll 是在 Internet Explorer 4。0 或更高版本中進行 HTML 語法分析和翻譯的組件,同時通過動態 HTML對象模型提供 HTML 文檔。這個組件引用腳本引擎、Microsoft 虛擬機、ActiveX 控件、插件以及它加載的 HTML 文檔可能引用的其它對象。Mshtml。dll 實現 Active Document 服務器接口,這樣,就能通過標準 COM 接口引用它。   使用框架時,Shdocvw。dll 又被 Mshtml。dll 引用,這樣就形成了第歸。這種情況下,每一個幀都是一個引用 Mshtml。dll 的 Shdocvw。dll 的實例。   由于這是一個基于 OLE 的體系結構,ActiveX 控件常用的周邊屬性也同樣適用于 Internet Explorer 組件。通過這種方式,WebBrowser 控件的宿主可以設置周邊屬性以過濾加載的文檔引用的所有幀和控件。 選擇正確的組件控件   WebBrowser 控件提供豐富的宿主需要的典型功能,如內置連接等。這樣,對大多數瀏覽或查看 HTML 文檔的應用程序而言,引用 WebBrower 比引用 MSHTML 更合適。只有特殊的,例如,對 HTML 進行語法分析的應用程序我們建議引用 MSHTML。   還需要注意的是,雖然引用 MSHTML 稍微比引用 WebBrowser 控件輕巧一點,但節約的開銷很少能補償那些實現在 WebBrowser 中已有功能時所需的額外工作。WebBrowser很可能已經被加載到內存,并且瀏覽包含框架的頁面也會導致 WebBrowser 作為標準工作集的一部分從而被加載。 提供附加控制   WebBrowser 和 MSHTML 組件的宿主可以控制特定的功能。對 WebBrowser 控件而言,這包括瀏覽并且在加載文檔時接受事件。這兩個組件都能通過實現 IDocHostUIHandler 和 IDocHostShowUI 接口提供附加控制。這些接口通常用于替代瀏覽期默認提供的上下文相關菜單。它們的用途還包括設置三維邊框、替代保存選項的注冊表項的位置和擴展動態 HTML 對象模型。   組件通過在宿主應用程序實現的 IOleClientSite 上調用 QueryInterface 從宿主獲得這些接口。 控制上下文相關菜單   引用 WebBrowser 控件時有一個常見的要求,就是能夠替代或添加在瀏覽器窗口中點擊右鍵時顯示的上下文相關菜單。那些使用 WebBrowser 控鍵查看豐富內容而不希望用戶知道他們在查看 HTML 的應用程序特別需要這種能力。同時,這種能力對不希望用戶能看到內容的 HTML 源代碼的應用程序很有用處。   有兩種技術可以完成這一工作。第一種涉及到使用 IDocHostUIHandler 接口并允許應用程序禁止或替代上下文相關菜單。第二種技術使用注冊表并允許擴展已有的上下文相關菜單。   ●替代上下文相關菜單   通過實現 IDocHostUIHandler::ShowContextMenu 方法能將 WebBrowser 控件的 上下文相關菜單整體替換。從此方法中返回 E_NOTIMPL 或 S_FALSE 告訴 WebBrowser 它應該顯示它自己的標準上下文相關菜單。然而,返回 S_OK 致使 WebBrowser 不顯示 它的菜單,并假定宿主程序采取了適當的行動。宿主程序可以禁止所有上下文相關菜單 或使用它自己的上下文相關菜單。向實現這一方法的宿主程序提供的參數使宿主程序 能夠識別 WebBrowser 將顯示的默認菜單和菜單的坐標。這樣就向宿主程序提供了全部 上下文相關菜單。例如,宿主程序可以選擇僅僅替代圖形的上下文相關菜單而保留標準 的上下文相關菜單。   ●添加標準上下文相關菜單   通過在注冊表里添加項目并將它們連接到執行腳本的 URL,可以向WebBrowser已有的上下文相關菜單中添加菜單項。要向標準上下文相關菜單中添加菜單項,創建或打開:   HKEY_CURRENT_USER       Software         Microsoft           Internet Explorer             MenuExt   在此位置,以你所希望在菜單中顯示的文本為鍵名創建新鍵。鍵的默認值為將要執行的URL。鍵名可以包括&字符,表示緊跟在 & 之后的字符將帶有下劃線。URL 將被加載到一個隱藏的 HTML 對話框,所有嵌入腳本將被執行,然后關閉對話框。隱藏的 HTML 對話框的 nuArguments 屬性包含了執行上下文相關菜單項的窗口的 window 對象。   以下注冊表內容向 WebBrowser 的上下文相關菜單中添加標題為“My Menu Item”的菜單項,它執行包含文件 c:\ m 中的嵌入腳本。   HKEY_CURRENT_USER       Software         Microsoft           Internet Explorer             MenuExt               My Menu Item = "file://c:\ m"   c:\ m 的內容如下:        var parentwin = nuArguments;     var doc = cument;     var sel = lection;     var rng = eateRange();     var str = new String(rng。text);     if(str。length == 0)       rng。text = "MY INSERTED TEXT";     else       rng。text = UpperCase();      這個腳本通過 nuArguments 獲得上級窗口對象。上級窗口對象時執行上下文相關菜單的 WebBrowser。然后,腳本獲得當前選中區域,隨后,如果當前選中區域不存在,就在執行上下文相關文檔的位置插入文本“MY INSERTED TEXT”。如果當前選中區域存在,將選中的文本變成大寫。   ●可選注冊表項   在我們剛才創建的注冊表項下有一對可選值。其中之一指明此菜單項將出現在哪一個上下文相關菜單中。另一個指明將以對話框方式運行腳本。   DWORD 鍵值 “Contexts” 指明在哪一個上下文相關菜單中將出現此菜單項。它是由下列數值 (定義在 Mshtmhst。h 中) 以邏輯“或”方式組合起來的位掩碼。這些數值同在 IDocHostUIHandler::ShowContextMenu 調用中傳遞的常數一致。   (0x1       open( ef);    擴展動態 HTML 對象模型   宿主應用程序可以擴展動態 HTML 對象模型以便腳本可以引用宿主提供的功能。這些腳本通過指定窗口對象可用的外部對象來引用宿主程序。例如,引用“window。external。speech”調用宿主程序以解析名稱“speech”。文檔里的所有標準腳本將像往常一樣地執行。   這種擴展機制就是在宿主程序中為對象模型擴展提供一個 IDispatch 接口,引用外部對象時將在它上面調用 GetIDsofNames 和 Invoke。WebBrowser 或 MSHTML 組件通過調用宿主的 IDocHostUIHandler::GetExternal 方法獲得所提供的 IDispatch。   關于擴展動態 HTML 對象模型的例子,參見例程序 Driller。 控制下載   宿主可以在某些方面控制下載—幀、圖形、Java等等—通過實現 IOleClientSite 和一個定義為 DISPID_AMBIENT_DLCONTROL 的周邊屬性。當 dispidMember 設置為DISPID_AMBIENT_DLCONTROL 調用宿主的 IDispatch::Invoke 方法時,它應該將pvarResult 設置為 0 或下列值的組合:   DLCTL_BGSOUNDS 瀏覽器組件播放同文檔相聯的背景聲音;   DLCTL_DLIMAGES 瀏覽器組件從服務器下載圖形;   DLCTL_DOWNLOADONLY 瀏覽器組件下載頁面但不顯示;   DLCTL_FORCEOFFLINE 瀏覽器組件工作在脫機方式。通過 URLMON 提出請求時, 即使計算機連接了互聯網,也設置 BINDF_OFFLINEOPERATION 標志;   DLCTL_NO_BEHAVIORS 瀏覽器組件不執行任何行為;   DLCTL_NO_CLIENTPULL 瀏覽器組件不執行任何客戶端的 pull 操作;   DLCTL_NO_DLACTIVEXCTLS 瀏覽器組件不下載文檔中的任何 ActiveX 控件;   DLCTL_NO_FRAMEDOWNLOAD 瀏覽器組件對包含框架的頁面進行語法分析但不下載任何幀, 同時忽略框架,不翻譯任何 frame 標記;   DLCTL_NO_JAVA 瀏覽器組件不執行任何 Java applet;   DLCTL_NO_METACHARSET 瀏覽器組件隱藏文檔中的 META 元素指示的字符集;   DLCTL_NO_RUNACTIVEXCTLS 瀏覽器組件不執行文檔中的任何 ActiveX 控件;   DLCTL_NO_SCRIPTS 瀏覽器組件不執行任何腳本;   DLCTL_OFFLINE 與 DLCTL_OFFLINEIFNOTCONNECTED 相同;   DLCTL_OFFLINEIFNOTCONNECTED 如果未連接互聯網,瀏覽器組件將以脫機方式工作。通過 URLMON 提出請求時,即使計算機連接了互聯網,也設置 BINDF_GETFROMCACHE_IF_NET_FAIL 標志;   DLCTL_PRAGMA_NO_CACHE 瀏覽器組件迫使請求發送給服務器并忽略代理,即使代理指明 數據是最新的也是如此。通過 URLMON 提出請求時,設置 BINDF_PRAGMA_NO_CACHE 標志;   DLCTL_RESYNCHRONIZE 瀏覽器組件忽略緩存中的數據并向服務器請求更新。如果服務器指明 緩存中的數據是更新了的則使用緩存數據。通過 URLMON 提出 請求時,設置 BINDF_RESYNCHRONIZE 標志;   DLCTL_SILENT 瀏覽器組件不顯示用戶界面。通過 URLMON 提出請求時,設置 BINDF_SILENTOPERATION 標志;   DLCTL_URL_ENCODING_DISABLE_UTF8 瀏覽器組件禁止 UTF-8 編碼;   DLCTL_URL_ENCODING_ENABLE_UTF8 瀏覽器組件允許 UTF-8 編碼;   DLCTL_VIDEOS 瀏覽器組件播放文檔中包含的視頻片斷。 安全管理 瀏覽器組件的宿主可以實現它們自己的安全管理并替代 WebBrowser 中已有的設置。通過實現 IInternetSecurityManager 接口完成這一功能。瀏覽器組件以SID_SInternetSecurityManager 參數調用宿主的 IServiceProvider::QueryService方法來獲得這個接口。