Microsoft Virtual Studio 中的 WebBrowser 在使用上有蠻多的應用方式
然而有時候開啟某些網站時,卻會提示更換使用較新瀏覽器版本
即使已將 IE 更新的提示較新的版本,透過 WebBrowser 開啟依舊還是跳出提示,這點還真是讓人有點困擾
WebBrowser控制項 在執行階段中預設套用的IE版本,是系統上的註冊機碼定義的
這個註冊機碼的預設值會受到 安裝的系統、IE版本 和 .NET Framework 版本 所影響
環境是: Windows 7 x64 安裝 IE 11 及 .NET Framework 4.7
先來看一下註冊機碼
1 2 3 4 5 6 7 |
32位元 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 64位元 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 以上是 HKEY_LOCAL_MACHINE 中的路徑,而 HKEY_CURRENT_USER 中的相同路徑也可以定義 |
從範例的圖片可以看出來,透過應用程式的檔案名稱可以各別指定所需要使用的IE版本
沒有特別定義應該就會使用預設值
設定值可以參考下表官方的說明,或到官方查詢最新的說明:Browser Emulation
Value | Description |
11001 (0x2AF9) | Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the?declared !DOCTYPE directive. Failing to?declare a !DOCTYPE directive?causes the page to load in Quirks. |
11000 (0x2AF8) | IE11. Webpages containing standards-based?!DOCTYPE directives?are displayed in IE11 edge mode. Default value for IE11. |
10001 (0x2711) | Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the?!DOCTYPE directive. |
10000 (0x02710) | Internet Explorer 10. Webpages containing standards-based?!DOCTYPE directivesare displayed in IE10 Standards mode. Default value for Internet Explorer 10. |
9999 (0x270F) | Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the?declared !DOCTYPE directive. Failing to?declare a !DOCTYPE directive?causes the page to load in Quirks. |
9000 (0x2328) | Internet Explorer 9. Webpages containing standards-based?!DOCTYPE directivesare displayed in IE9 mode. Default value for Internet Explorer 9.
Important?In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
|
8888 (0x22B8) | Webpages are displayed in IE8 Standards mode, regardless of the?declared !DOCTYPE directive. Failing to?declare a !DOCTYPE directive?causes the page to load in Quirks. |
8000 (0x1F40) | Webpages containing standards-based?!DOCTYPE directives?are displayed in IE8 mode. Default value for Internet Explorer 8
Important?In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
|
7000 (0x1B58) | Webpages containing standards-based?!DOCTYPE directives?are displayed in IE7 Standards mode. Default value for applications hosting the?WebBrowser Control. |
知道如何設定模擬的IE版本,就可以解決遇到IE版本太低的問題
方法不外乎就是
- 手動修改註冊機碼,或以 登錄項目檔案(reg副檔名) 來新增設定值
- 程式自動處理註冊機碼
使用程式自動設定的話,有兩個選擇:
- HKEY_LOCAL_MACHINE
整個系統的所有使用者都套用,但程式本身要有 系統管理者權限 才能有寫入權限
一是使用按右鍵「以系統管理員身份啟動」,另一方式是在 app.manifest 設定 requestedExecutionLevel 的 level=requireAdministrator
或是作業系統停用 UAC (使用者帳戶控制) - HKEY_CURRENT_USER
只套用目前登入的使用者,一般使用者權限即可完成
不用處理任何權限的問題,即使沒有停用 UAC 一樣可以動作
以下的是 VB.NET 的範例,註冊機碼則是寫入到 HKEY_CURRENT_USER
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Public Sub New() MyBase.New() Dim AppName = Process.GetCurrentProcess().MainModule.ModuleName Dim WebBrowserEmuVer As Integer = 9000 ' x86 Registry.SetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", AppName, WebBrowserEmuVer, RegistryValueKind.DWord) ' x64 Registry.SetValue("HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", AppName, WebBrowserEmuVer, RegistryValueKind.DWord) End Sub |
在 啟動表單 中加入以上的程式碼,程式啟動時候就會自動去寫入註冊機碼
程式在執行階段就可以讓 WebBrowser 以指定的 IE 版本模式運作