Я управляю веб-браузером, инициализируется с помощью 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
Попробуйте обработать NavigateError
событие в базовом элементе управления ActiveX WebBrowser. я имею пример показывая, как справиться с «базовым» WebBrowser
такие события Это для WPF, но это может быть легко адаптер для WinForms (используя WebBrowser.ActiveXInstance
).
В качестве альтернативы, я думаю, вы должны быть в состоянии обрабатывать такого рода сообщения путем реализации IDocHostShowUI::ShowMessage
. я имею другой пример показывая, как реализовать IDocHostUIHandler
на WebBrowser
объект сайта. Тот же подход может быть использован для IDocHostShowUI
,
Отказ от ответственности: я не проверял ни одно из этих двух потенциальных решений.
Это неприятное поведение элемента управления 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>