Here is a solution i just made with reflection. Solves the issue 🙂
I run it at the Navigated event, as it seems the activeX object is not available until then.
What it does is set the .Silent property on the underlying activeX object. Which is the same as the .ScriptErrorsSuppressed property which is the Windows forms equivalent.
public void HideScriptErrors(WebBrowser wb, bool Hide) {
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
object objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) return;
objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });
}
A better version that can be run anytime and not after the .Navigated event:
public void HideScriptErrors(WebBrowser wb, bool hide) {
var fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
var objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) {
wb.Loaded += (o, s) => HideScriptErrors(wb, hide); //In case we are to early
return;
}
objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide });
}
If any issues with the second sample, try swapping wb.Loaded with wb.Navigated.
- Remove From My Forums
-
Question
-
There is no ScriptErrorsSuppressed property, so how do I suppress them?
It’s extremely annoying that this control doesn’t have this feature!
Answers
-
Hi,
Due to time constraints, we were very limited on how many features we could add to the WebBrowser control. For now, the best option for any script which could throw a script error is to add a try/catch inside the failure-prone areas of the script. If that’s not possible, the next alternative would be to continue using the WinForms WebBrowser control, though that only works in Full Trust apps.
Andre
-
Marked as answer by
Wednesday, July 30, 2008 11:22 AM
-
Marked as answer by
- Remove From My Forums
-
Question
-
There is no ScriptErrorsSuppressed property, so how do I suppress them?
It’s extremely annoying that this control doesn’t have this feature!
Answers
-
Hi,
Due to time constraints, we were very limited on how many features we could add to the WebBrowser control. For now, the best option for any script which could throw a script error is to add a try/catch inside the failure-prone areas of the script. If that’s not possible, the next alternative would be to continue using the WinForms WebBrowser control, though that only works in Full Trust apps.
Andre
-
Marked as answer by
Wednesday, July 30, 2008 11:22 AM
-
Marked as answer by
- Remove From My Forums
-
Question
-
There is no ScriptErrorsSuppressed property, so how do I suppress them?
It’s extremely annoying that this control doesn’t have this feature!
Answers
-
Hi,
Due to time constraints, we were very limited on how many features we could add to the WebBrowser control. For now, the best option for any script which could throw a script error is to add a try/catch inside the failure-prone areas of the script. If that’s not possible, the next alternative would be to continue using the WinForms WebBrowser control, though that only works in Full Trust apps.
Andre
-
Marked as answer by
Wednesday, July 30, 2008 11:22 AM
-
Marked as answer by
Все привет! Если вы, как и я приверженцы стандартных контролов framework. И при загрузке сайта возникаю ошибки сценария «На этой странице произошла ошибка сценария. Объект не поддерживает свойство или метод. Вы хотите продолжить выполнения сценария на этой странице?»:

Обычно таких окон всплывает огромное множество, и остановить их нажатием на кнопку Да или Нет ничего не выйдет. Да в конце будет загружен сайт, но выглядеть он будет криво, в прямом смысле этого слова.
Можно попробовать воспользоваться свойством:
|
webBrowser1.ScriptErrorsSuppressed = true; |
После установки свойства значения true окон об ошибках больше мы не увидим, но это не означает что они пропали. Сайт по-прежнему будет выглядеть криво, а часть скриптов на Java Script просто не работает.
Мы даже можем увидеть следующую информацию, к примеру при заходе на сайт вкнонтакте.

Проблема кроется в том, что все современные сайт отказались от поддержки Internet Explorer.
А вот теперь зная проблему, мы можем ее решить, есть два варианта, если мы имеем доступ к сайту к изменению его html разметки, то нам достаточно добавить следующие строчки кода:
|
<head><meta http—equiv=«X-UA-Compatible» content=«IE=Edge» /></head> |
Данный мета тег говорит о том, как загружать страницу, а точнее какой браузер использовать по умолчанию для контента, и как мы видим это Edge. Хочу заранее сказать, что такие теги по умолчанию вставлены во все поисковые системы, или аналоги их, потому при загрузке не возникает не каких JS ошибок.
Но что делать если мы хотим использовать сайт, к которому не имеем доступа для изменений html разметки?
Ничего сложного, просто надо внести изменения в реестре, я даже не знаю почему этого не сделали по умолчанию в windows 10 для всех приложений, видимо это не возможно, поэтому вначале сделаем вручную, а потом покажу как это сделать программно.
Пример покажу под Windows 10 64 так как не могу протестировать для 32 бит версии или других OS. Но по сути ничего не меняется за исключением ветки для 32 и 64 версии.
|
//КомпьютерHKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION //КомпьютерHKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION //КомпьютерHKEY_CURRENT_USERSOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_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(); } } |