一、背景
這幾天在維護公司的一個項目,嗯…到現在七八年沒人動過了(也是老古董了),都說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-位)值]![]()
WebBrowser核心指定
建立的項取名為MyApplication.exe,編輯值時,選擇基數“十進制”,填寫數值資料,這裡填寫11000(IE11)![]()
WebBrowser核心指定
最後運作MyAplication.exe,發現問題已經解決
不同IE版本所對應的DWORD值:
但是….這樣手動去改系統資料庫始終比較麻煩,本着能用代碼解決的問題就盡量用代碼來解決的想法,決定改改
3.自動指定WebBrowser核心
思路:檢測IE版本、根據不同IE版本傳回DWORD值、修改系統資料庫
直接貼代碼吧,裡面有注釋
最後,在程式啟動時調用:
IEVersion.BrowserEmulationSet();
然後檢查系統資料庫,發現已經修改成功。再次運作程式,發現問題已經解決。
以上隻是本人解決問題的一個方式方法,不官方不權威,不當之處煩請指正
花了一天時間,解決了一個問題(隻是暫時的),想想還是挺悲哀的,這工作效率要是被老闆知道了…
這是一個很多年前的代碼,即使他很古董,但其中必然有我值得學習的地方,這隻是第一步,後面還有許多坑要去填,幾年下來也确實累積了許多bug,至少曾經還是輝煌過…
當然,會改版的(正決定往Web版調整呢)….
回頭看了看自己的部落格,慘(zhi)不(guai)忍(tai)睹(lan),後面還是得多添磚加瓦了