WebBrowser控件:导航显示错误消息框,即使.Silent为true

时间:2014-03-05 14:36:25

标签: c++ internet-explorer webbrowser-control atl

我正在托管使用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

2 个答案:

答案 0 :(得分:1)

尝试在基础WebBrowser ActiveX控件上处理NavigateError事件。我an example展示了如何处理“底层”WebBrowser事件。它适用于WPF,但它可以很容易地适用于WinForms(使用WebBrowser.ActiveXInstance)。

或者,我认为您应该能够通过实施IDocHostShowUI::ShowMessage来处理此类消息。我another example展示了如何在IDocHostUIHandler网站对象上实施WebBrowserIDocHostShowUI可以使用相同的方法。

免责声明:我尚未核实这两种可能的解决方案。

答案 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>