c++ - WebBrowser 控件 : Navigate shows error message box even though . Silent 为真

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

我正在托管一个 Web 浏览器控件,使用 IWebBrowser2.put_Silent(VARIANT_TRUE) 进行初始化。

但是,当使用格式错误的路径调用 IWebBrowser2.Navigate 时,我仍然会收到一个消息框,相当于

"file:///D://htmlstuff/page.html" was not found. Make sure the path or internet address is correct.

此处的问题是用户意外指定的双斜杠(D:\htmlstuff 而不是 D:\htmlstuff)。

我可以在执行导航之前更早地发现这个特定问题,但我担心这个消息框仍然出现,因为我无法验证每个可能的 URL(或其他可能导致 webbrowser 控件忽略 Silent 标志的原因) .

我希望得到一个静默返回的错误代码。

有什么想法吗?是否有“更安静”的选项?

Windows 8.0、IE 10.0.9200.16750

最佳答案

这是 WebBrowser 控件的不良行为,我在使用 VBA 和 UserForms 时遇到过这种情况。 我的解决方法是将目标 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>

关于c++ - WebBrowser 控件 : Navigate shows error message box even though . Silent 为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200768/

相关文章:

internet-explorer - Windows 10 中的 TWebbrowser : Microsoft Edge (formerly Spartan)/Internet Explorer legacy issues

C# WPF Web 浏览器控件 : How to use JavaScript

c++ - printf() 似乎改变了一个变量

c++ - 包括外部 header 找出编译器选项

.net - 以编程方式将受信任的站点添加到 Internet Explorer

javascript - 在 WebBrowser 控件中检测滚动到底部

c# - IE9 WebBrowser 控件是否支持 IE9 的所有功能,包括 SVG?

c++ - 在 C++ 中将函数作为参数传递

c++ - 如何根据条件选择结构

html - 表格的内边框在 Internet Explorer 9 (IE 9) 中不会拉伸(stretch)整个表格