問題情境:
html界面用瀏覽器直接打開正常,使用c#自帶webbrowser打開報錯(具體是js腳本相關錯誤)
疑難辨析:
對症下葯,報錯內容雖是js腳本錯誤,但應該知道js,html相關代碼都准確無誤,因為在瀏覽器打開正常。
考慮到webbrowser內核版本和系統自帶ie瀏覽器版本有差別,所以問題很可能在這里。
解決方案:
最好修改webbrowser默認瀏覽器內核版本,暫未找到。可以先修改自己程序對應的瀏覽器內核版本。
通過注冊表進行修改,修改位置一定要找到,現有兩個位置提供參考。
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
和
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Wow6432Node
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
這兩個位置區別,自己查找。
在此位置添加值DWORD(32位),仿照該位置下其他值填寫,名字為exe名,值為十進制(最新11001)。
細節注意:
1.解決方案debug最好改為release
2.如果不夠明確上述兩個位置,最好都進行填寫。
3.填寫成功之后,最好雙擊exe運行檢測。
4.檢測版本,可通過登錄網址“https://ie.icoa.cn/”進行檢測。
注冊表修改方法一(需要管理員權限):
private void setRegedit() { try { string kernel = "11001"; string path = @"SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; string name = "LoadJS.exe"; RegistryKey key = Registry.LocalMachine; RegistryKey software = key.OpenSubKey(path, true); software.SetValue(name, kernel, RegistryValueKind.DWord); key.Close(); } catch (Exception e) { MessageBox.Show(e.Message + e.StackTrace); } }
注冊表修改方法二(無須管理員權限):
經測試,管理員權限和方法無關,和注冊表路徑位置有關。
/// <summary> /// 修改注冊表信息使WebBrowser使用指定版本IE內核 /// </summary> public static void SetFeatures(UInt32 ieMode)//參數非類似6000,7000;代表edge瀏覽器,如,123 { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) { throw new ApplicationException(); } //獲取程序及名稱 string appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); string featureControlRegKey = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\"; //設置瀏覽器對應用程序(appName)以什么模式(ieMode)運行 Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION", appName, ieMode, RegistryValueKind.DWord); //不曉得設置有什么用 Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", appName, 1, RegistryValueKind.DWord); }