我正在托管使用IWebBrowser2.put_Silent(VARIANT_TRUE)
初始化的网络浏览器控件。
但是,在使用格式错误的路径调用IWebBrowser2.Navigate
时,我仍会收到相当于
找不到“file:/// D://htmlstuff/page.html”。确保路径或互联网地址正确无误。
这里的问题是用户指定的意外双斜杠(D:\ htmlstuff而不是D:\ htmlstuff)。
我可以在执行Navigate之前更早地捕获此特定问题,但我担心此消息框仍然出现,因为我无法验证每个可能的URL(或其他可能导致webbrowser控件忽略Silent标志的原因) 。
我希望得到一个静默返回的错误代码。
有什么想法吗?是否有“更沉默”的选择?
Windows 8.0,IE 10.0.9200.16750
答案 0 :(得分:1)
尝试在基础WebBrowser ActiveX控件上处理NavigateError
事件。我an example展示了如何处理“底层”WebBrowser
事件。它适用于WPF,但它可以很容易地适用于WinForms(使用WebBrowser.ActiveXInstance
)。
或者,我认为您应该能够通过实施IDocHostShowUI::ShowMessage
来处理此类消息。我another example展示了如何在IDocHostUIHandler
网站对象上实施WebBrowser
。 IDocHostShowUI
可以使用相同的方法。
免责声明:我尚未核实这两种可能的解决方案。
答案 1 :(得分:1)
这是WebBrowser控件的一个令人讨厌的行为,我使用VBA和UserForms。 我的解决方法是将目标网址加载到小主机页面中的iframe中。这个 方式没有弹出警报,你可以查询目标网址是否确实加载。
使用<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>