WebBrowser内核指定
一、背景
這幾天在維護公司的一個項目,嗯…到現在七八年沒人動過了(也是老古董了),都說N年前的代碼碰不得 處處是坑 不能挖坑還得一步一步的填坑,恰好今天就填了一坑 此處作為記錄 供以后翻閱,對代碼除了有些看不懂或者說是很凌亂之外,其他都還行(沒注釋、有注釋的地方是自動生成的英文注釋…..、包含 各種委托、事件、多線程、用戶控件等等)。
二、問題
對 就是一個CS程序,其中有個功能是輸入網址然后展示網頁內容,so問題來了 很多網站不支持IE8以下內核的瀏覽器(很粗暴的跳轉到瀏覽器下載頁面~~)。那為什么不用webkit內核的呢…剛剛也說了這是七八年前的代碼了…,用的是WebBrowser WebBrowser WebBrowser,說給換一個吧 時間又不允許 而且…你懂的~~(主要是調整太多),也就只能死馬當活馬醫了。
三、解決方式
1.升級IE瀏覽器
第一時間 想到的就是升級IE瀏覽器,說干就干 下載安裝最新版IE瀏覽器…重啟…運行程序…輸入網址… 很粗暴的跳轉到瀏覽器下載頁面~~,看來還是太天真…?原來WebBrowser默認使用IE7內核、只升級瀏覽器是沒用的,需要手動指定
2.手動指定WebBrowser內核
瀏覽了許多資料后,找到了解決方案:改注冊表
在開始菜單內輸入“regedit.exe”,進入注冊表編輯器
找到注冊表項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
在右側空白區域內單擊鼠標右鍵,點擊[新建]→[DWORD(32-位)值]
新建的項取名為MyApplication.exe,編輯值時,選擇基數“十進制”,填寫數值數據,這里填寫11000(IE11)
最后運行MyAplication.exe,發現問題已經解決
不同IE版本所對應的DWORD值:
原文:https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
但是….這樣手動去改注冊表始終比較麻煩,本著能用代碼解決的問題就盡量用代碼來解決的想法,決定改改
3.自動指定WebBrowser內核
思路:檢測IE版本、根據不同IE版本返回DWORD值、修改注冊表
直接貼代碼吧,里面有注釋
Code:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | public?class?IEVersion ??{ ??????/// <summary> ??????/// IE WebBrowser內核設置 ??????/// </summary> ??????public?static?void?BrowserEmulationSet() ??????{ ??????????//當前程序名稱 ??????????var?exeName = Process.GetCurrentProcess().ProcessName +?".exe"; ??????????//系統注冊表信息 ??????????var?mreg = Registry.LocalMachine; ??????????//IE注冊表信息 ??????????var?ie = mreg.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree); ??????????if?(ie !=?null) ??????????{ ??????????????try ??????????????{ ??????????????????var?val = ieVersionEmulation(ieVersion()); ??????????????????if?(val != 0) ??????????????????{ ??????????????????????ie.SetValue(exeName, val); ??????????????????} ??????????????????mreg.Close(); ??????????????} ??????????????catch?(Exception ex) ??????????????{ ??????????????????Console.Write(ex.Message); ??????????????} ??????????} ??????} ??????/// <summary> ??????/// IE版本號 ??????/// </summary> ??????/// <returns></returns> ??????static?int?ieVersion() ??????{ ??????????//IE版本號 ??????????RegistryKey mreg = Registry.LocalMachine; ??????????mreg = mreg.CreateSubKey("SOFTWARE\\Microsoft\\Internet Explorer"); ??????????//更新版本 ??????????var?svcVersion = mreg.GetValue("svcVersion"); ??????????if?(svcVersion !=?null) ??????????{ ??????????????mreg.Close(); ??????????????var?v = svcVersion.ToString().Split('.')[0]; ??????????????return?int.Parse(v); ??????????} ??????????else ??????????{ ??????????????//默認版本 ??????????????var?ieVersion = mreg.GetValue("Version"); ??????????????mreg.Close(); ??????????????if?(ieVersion !=?null) ??????????????{ ??????????????????var?v = ieVersion.ToString().Split('.')[0]; ??????????????????return?int.Parse(v); ??????????????} ??????????} ??????????return?0; ??????} ??????/// <summary> ??????/// 根據IE版本號 返回Emulation值 ??????/// </summary> ??????/// <param name="ieVersion"></param> ??????/// <returns></returns> ??????static?int?ieVersionEmulation(int?ieVersion) ??????{ ??????????//IE7 7000 (0x1B58) ??????????if?(ieVersion < 8) ??????????{ ??????????????return?0; ??????????} ??????????if?(ieVersion == 8) ??????????{ ??????????????return?0x1F40;//8000 (0x1F40)、8888 (0x22B8) ??????????} ??????????if?(ieVersion == 9) ??????????{ ??????????????return?0x2328;//9000 (0x2328)、9999 (0x270F) ??????????} ??????????else?if?(ieVersion == 10) ??????????{ ??????????????return?0x02710;//10000 (0x02710)、10001 (0x2711) ??????????} ??????????else?if?(ieVersion == 11) ??????????{ ??????????????return?0x2AF8;//11000 (0x2AF8)、11001 (0x2AF9 ??????????} ??????????return?0; ??????} ??} |
最后,在程序啟動時調用:
IEVersion.BrowserEmulationSet();
然后檢查注冊表,發現已經修改成功。再次運行程序,發現問題已經解決。
https://www.cnblogs.com/doscanner/p/5611434.html
總結
以上是生活随笔為你收集整理的WebBrowser内核指定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝的4种基础营销工具,裂变优惠券的设置
- 下一篇: 小鹅袋待放款需要多久