簡體   English   中英

在一個應用程序中並排使用多個Internet Explorer版本

[英]Multiple Internet Explorer versions side-by-side in one application

在我正在使用的MFC應用程序中,我需要顯示一個Internet Explorer(我們正在使用組件CHtmlView),當前我們能夠使用FEATURE_BROWSER_EMULATION注冊表項來更改IE工作的呈現模式。 但是,這僅允許我們更改應用程序中所有CHtmlView實例的呈現模式,並且要應用此更改,我們必須重新啟動應用程序。
問題是,我們希望在應用程序中並排顯示多個版本的IE。 我知道可以在一台計算機上獲得多個IE版本,但是我不確定如何在一個應用程序中將它們全部獲得。
我們有一些想法,如何解決這個問題,但它們並不是真正的簡單解決方案,因此,我想請教您一些想法。 無論如何,這是我們想到的:

  1. 下載頁面的源代碼,添加文檔兼容性標簽 ,將文檔中的所有地址更改為絕對地址,然后將此頁面保存到磁盤。 然后使用IE從光盤重新加載頁面。 該解決方案僅部分起作用,因為盡管它使IE使用正確的呈現模式,但該頁面無法加載某些資源,因為該頁面與原始頁面的位置不同-我們更改的地址效果很好,但是例如JavaScript生成的不是。 這個解決方案通常非常混亂,因此我們刪除了該解決方案。

  2. 使用多個進程-每個IE版本都具有其自己的可執行文件/ dll庫,我們在每個可執行文件上使用瀏覽器仿真功能 ,然后以某種方式將其粘貼到一個應用程序中(我承認,我不知道如何使用,因為我從未使用過Windows / MFC的多個進程)。 但我不知道該解決方案是否還能奏效...

  3. 為我們的應用程序創建一個代理,該代理將以解決方案1所示的類似方式更改下載的源代碼-它將添加文檔兼容性標簽 ,以強制IE進入所需的模式,但是可以保留地址,如IE會將源視為來自原始位置。 在我看來,此解決方案似乎是最安全的解決方案,但與2.解決方案一樣,我也不知道如何為我們的應用程序創建代理層,更重要的是,它需要花費多少時間。

那么您對如何解決這個問題有任何想法嗎? 如果解決方案使用的不是CHtmlView,則可以隨時進行更改。 至於IE版本,我們希望擁有它,支持IE6會很好,但是沒有必要,最低要求的版本是IE7。

謝謝您的寶貴時間,我們將不勝感激。

最后,我通過使用

我們自己的代理服務器(使用boost asio實現),並修改http請求/響應標頭以強制IE進入正確的兼容模式。

幾個具有唯一名稱的可執行文件,並在注冊表中設置兼容模式 每個瀏覽器版本都在單獨的過程中運行。

事實證明,代理服務器解決方案並不總是能按預期工作。 多進程解決方案確實按預期工作,但是最終,模擬的瀏覽器並不總是像真正的瀏覽器一樣工作,並且整個解決方案並非100%可靠。

我希望這會在將來對某人有所幫助。

暫無
暫無

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

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