Вот решение, которое я только что сделал с отражением. Решает проблему :) Я запускаю его в событии Navigated, так как до тех пор кажется, что объект activeX недоступен.
Он устанавливает свойство .Silent для базового объекта ActiveX. Это то же самое, что и свойство .ScriptErrorsSuppressed, эквивалентное формам Windows.
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 });
}
Лучшая версия, которую можно запускать в любое время, а не после события .Navigated:
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 });
}
Если возникнут проблемы со вторым образцом, попробуйте заменить wb.Loaded на wb.Navigated.
person
Wolf5
schedule
06.07.2010