c# winform 打開html界面(含引用外部文件js)


問題情境:

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);
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM