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

  

posted @ 2020-02-20 15:55  风影我爱罗  阅读(2368)  评论(1编辑  收藏  举报