Все привет! Если вы, как и я приверженцы стандартных контролов framework. И при загрузке сайта возникаю ошибки сценария «На этой странице произошла ошибка сценария. Объект не поддерживает свойство или метод. Вы хотите продолжить выполнения сценария на этой странице?»:
Обычно таких окон всплывает огромное множество, и остановить их нажатием на кнопку Да или Нет ничего не выйдет. Да в конце будет загружен сайт, но выглядеть он будет криво, в прямом смысле этого слова.
Можно попробовать воспользоваться свойством:
1 |
webBrowser1.ScriptErrorsSuppressed = true; |
После установки свойства значения true окон об ошибках больше мы не увидим, но это не означает что они пропали. Сайт по-прежнему будет выглядеть криво, а часть скриптов на Java Script просто не работает.
Мы даже можем увидеть следующую информацию, к примеру при заходе на сайт вкнонтакте.
Проблема кроется в том, что все современные сайт отказались от поддержки Internet Explorer.
А вот теперь зная проблему, мы можем ее решить, есть два варианта, если мы имеем доступ к сайту к изменению его html разметки, то нам достаточно добавить следующие строчки кода:
1 |
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /></head> |
Данный мета тег говорит о том, как загружать страницу, а точнее какой браузер использовать по умолчанию для контента, и как мы видим это Edge. Хочу заранее сказать, что такие теги по умолчанию вставлены во все поисковые системы, или аналоги их, потому при загрузке не возникает не каких JS ошибок.
Но что делать если мы хотим использовать сайт, к которому не имеем доступа для изменений html разметки?
Ничего сложного, просто надо внести изменения в реестре, я даже не знаю почему этого не сделали по умолчанию в windows 10 для всех приложений, видимо это не возможно, поэтому вначале сделаем вручную, а потом покажу как это сделать программно.
Пример покажу под Windows 10 64 так как не могу протестировать для 32 бит версии или других OS. Но по сути ничего не меняется за исключением ветки для 32 и 64 версии.
1 2 3 4 5 6 |
//Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION //Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION //Компьютер\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION |
Вам нужно будет указать имя своего приложения, создать параметр Dword и десятичное значения устанавливаем в 11001.
Вроде как проблема и решена от части, так как webBrowser по умолчанию использует Internet Explorer, и изменить мы это не можем, но что нам говорит MS, а говорит нам о том, что мы можем эмулировать работу Edge, то есть мы будем с функциями Edge использовать Internet Explorer. Нам будут доступны для полноценной работы все теги html и JS. Но, к сожалению, мы так же не сможем зайти на многие сайты, так как они принудительно отключили поддержку Internet Explorer, и сделать уже с этим нечего, возможно MS когда ни будь добавят Edge в webBrowser, хотя уже прошло 10 лет, но ничего не изменилось. И для решения приходится использовать сторонние браузеры.
Как и обещал привожу пример автоматического добавления в реестр значений, в соответствии с вашей системой.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
private void Form1_Load(object sender, EventArgs e) { var appName = Process.GetCurrentProcess().ProcessName + ".exe"; SetIE8KeyforWebBrowserControl(appName); webBrowser1.ScriptErrorsSuppressed = true; webBrowser1.Url = new Uri("https://www.nookery.ru"); } private void SetIE8KeyforWebBrowserControl(string appName) { RegistryKey Regkey = null; try { // Для 64-разрядной машины if (Environment.Is64BitOperatingSystem) Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true); else //Для 32-разрядной машины Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true); //Если путь неправильный или //Если у пользователя нет привилегий доступа к реестру if (Regkey == null) { MessageBox.Show("Сбой настроек приложения — адрес не найден"); return; } string FindAppkey = Convert.ToString(Regkey.GetValue(appName)); // Проверьте, присутствует ли ключ if (FindAppkey == "11001") { MessageBox.Show("Необходимые параметры приложения присутствуют"); Regkey.Close(); return; } // Если ключ отсутствует, добавьте ключ, значение ключа 11001 (десятичное) if (string.IsNullOrEmpty(FindAppkey)) Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord); // Проверка наличия ключа после добавления FindAppkey = Convert.ToString(Regkey.GetValue(appName)); if (FindAppkey == "11001") MessageBox.Show("Параметры приложения успешно применены"); else MessageBox.Show("Сбой настроек приложения, ссылка: " + FindAppkey); } catch (Exception ex) { MessageBox.Show("Сбой настроек приложения"); MessageBox.Show(ex.Message); } finally { // Закрываем реестр if (Regkey != null) Regkey.Close(); } } |