개발/C#

[팁] C# 웹브라우저를 설치되어 있는 IE와 동일한 버전으로 자동 설정하기

FA1976 2018. 1. 26. 10:54

C#의 웹브라우저는 기본적으로 Explorer 버전이 7.0 이라고 한다.

최근의 웹 페이지들은 구버전의 IE를 지원하지 않는다. 따라서 C#의 웹브라우저를 설치된 Explorer 버전과 동일하게 해줘야 작동이 될텐데... 아래 코드를 이용하면된다.

region으로 설명을 구분해놨으니 쉬울것임.

        private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer";

        private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION";


        public enum BrowserEmulationVersion

        {

            Default = 0,

            Version7 = 7000,

            Version8 = 8000,

            Version8Standards = 8888,

            Version9 = 9000,

            Version9Standards = 9999,

            Version10 = 10000,

            Version10Standards = 10001,

            Version11 = 11000,

            Version11Edge = 11001

        }


#region 현재 설치되어있는 IE Explorer 버전 읽어오는것

        public static int GetInternetExplorerMajorVersion()

        {

            int result;


            result = 0;


            try

            {

                RegistryKey key;


                key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey);


                if (key != null)

                {

                    object value;


                    value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null);


                    if (value != null)

                    {

                        string version;

                        int separator;


                        version = value.ToString();

                        separator = version.IndexOf('.');

                        if (separator != -1)

                        {

                            int.TryParse(version.Substring(0, separator), out result);

                        }

                    }

                }

            }

            catch (SecurityException)

            {

                // The user does not have the permissions required to read from the registry key.

            }

            catch (UnauthorizedAccessException)

            {

                // The user does not have the necessary registry rights.

            }


            return result;

        }

        #endregion


#region 에뮬레이션 브라우저 버전 읽어오기

        public static BrowserEmulationVersion GetBrowserEmulationVersion()

        {

            BrowserEmulationVersion result;


            result = BrowserEmulationVersion.Default;


            try

            {

                RegistryKey key;


                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);

                if (key != null)

                {

                    string programName;

                    object value;


                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);

                    value = key.GetValue(programName, null);


                    if (value != null)

                    {

                        result = (BrowserEmulationVersion)Convert.ToInt32(value);

                    }

                }

            }

            catch (SecurityException)

            {

                // The user does not have the permissions required to read from the registry key.

            }

            catch (UnauthorizedAccessException)

            {

                // The user does not have the necessary registry rights.

            }


            return result;

        }

        

        public static bool IsBrowserEmulationSet()

        {

            return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default;

        }

        #endregion


#region 에뮬레이션 브라우저 설정


        public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion)

        {

            bool result;


            result = false;


            try

            {

                RegistryKey key;


                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);


                if (key != null)

                {

                    string programName;


                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);


                    if (browserEmulationVersion != BrowserEmulationVersion.Default)

                    {

                        // if it's a valid value, update or create the value

                        key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);

                    }

                    else

                    {

                        // otherwise, remove the existing value

                        key.DeleteValue(programName, false);

                    }


                    result = true;

                }

            }

            catch (SecurityException)

            {

                // The user does not have the permissions required to read from the registry key.

            }

            catch (UnauthorizedAccessException)

            {

                // The user does not have the necessary registry rights.

            }


            return result;

        }


        public static bool SetBrowserEmulationVersion()

        {

            int ieVersion;

            BrowserEmulationVersion emulationCode;


            ieVersion = GetInternetExplorerMajorVersion();


            if (ieVersion >= 11)

            {

                emulationCode = BrowserEmulationVersion.Version11;

            }

            else

            {

                switch (ieVersion)

                {

                    case 10:

                        emulationCode = BrowserEmulationVersion.Version10;

                        break;

                    case 9:

                        emulationCode = BrowserEmulationVersion.Version9;

                        break;

                    case 8:

                        emulationCode = BrowserEmulationVersion.Version8;

                        break;

                    default:

                        emulationCode = BrowserEmulationVersion.Version7;

                        break;

                }

            }


            return SetBrowserEmulationVersion(emulationCode);

        }


#endregion


        private void Form1_Load(object sender, EventArgs e)

        {

           SetBrowserEmulationVersion() <---- 사용자의 PC에 설치되어 있는 익스플러로의 버전을 읽어와 동일하게 설정해준다. 만약 버전을 다르게 하고 싶으면 위에 코드를 참조해서 파라미터 값을 넣어주면된다.

        }