zoukankan      html  css  js  c++  java
  • 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 = @"SOFTWAREWOW6432NodeMicrosoftInternet ExplorerMainFeatureControlFEATURE_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);
            }
    

      

  • 相关阅读:
    javascript基础
    DOM操作
    js各种弹框
    ZeroMQ,史上最快的消息队列(转)
    mysql 存储过程
    java数据结构与算法(二)----栈和队列
    java数据结构与算法(一)----数组简单排序
    软件开发流程(转)
    Digest [information value filtering]
    Facebook 的系统架构(转)
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/12336057.html
Copyright © 2011-2022 走看看