Элемент управления WebBrowser: Navigate показывает окно с сообщением об ошибке, даже если .Silent имеет значение true

Я управляю веб-браузером, инициализируется с помощью IWebBrowser2.put_Silent(VARIANT_TRUE),

Однако при звонке IWebBrowser2.Navigateс неправильным путем, я все еще получаю окно сообщения с эквивалентом

«file: /// D: //htmlstuff/page.html» не найден. Убедитесь, что путь или интернет-адрес правильный.

Проблема здесь заключается в случайном двойном слеше, указанном пользователем (D: \ htmlstuff вместо D: \ htmlstuff).

Я могу уловить эту конкретную проблему раньше, до выполнения Навигации, но я обеспокоен тем, что это окно сообщения по-прежнему возникает, поскольку я не могу проверить все возможные URL-адреса (или другую возможную причину, из-за которой элемент управления веб-браузера игнорирует флаг Silent).

Я ожидал бы получить код ошибки, возвращаемый без вывода сообщений.

Есть идеи? Есть ли еще более тихий вариант?

Windows 8.0, IE 10.0.9200.16750

2

Решение

Попробуйте обработать NavigateError событие в базовом элементе управления ActiveX WebBrowser. я имею пример показывая, как справиться с «базовым» WebBrowser такие события Это для WPF, но это может быть легко адаптер для WinForms (используя WebBrowser.ActiveXInstance).

В качестве альтернативы, я думаю, вы должны быть в состоянии обрабатывать такого рода сообщения путем реализации IDocHostShowUI::ShowMessage. я имею другой пример показывая, как реализовать IDocHostUIHandler на WebBrowser объект сайта. Тот же подход может быть использован для IDocHostShowUI,

Отказ от ответственности: я не проверял ни одно из этих двух потенциальных решений.

1

Другие решения

Это неприятное поведение элемента управления WebBrowser, с которым я сталкиваюсь в VBA и пользовательских формах.
Мой обходной путь заключался в загрузке целевого URL в iframe на небольшой странице хостинга. это
Таким образом, не появляется никаких предупреждений, и вы можете запросить, действительно ли целевой URL загружен или нет.

Звоните на страницу хостинга с <PathTo>/framehost.html#<TargetURL>

<!DOCTYPE html>
<head>
<title>Frame Host</title>
<script>

window.onload = function() {
var frame = document.getElementById('MyFrame');
frame.src = location.hash.substring(1);
frame.onload = function() {
try {
var doc = frame.contentDocument;
alert("Loaded " + frame.src);
} catch(e) {
alert("Failed to load " + frame.src)
}
}
}

</script>
</head>
<body>
<iframe id="MyFrame" src="about:blank"></iframe>
</body>
</html>
1

По вопросам рекламы [email protected]