防止WebBrowser控件吞下异常

时间:2020-03-05 18:41:07  来源:igfitidea点击:

我正在使用System.Windows.Forms.WebBrowser来创建一个Visual Studio初始页面视图。但是,该控件似乎通过静默地沉没它们来捕获和处理所有异常!无需说这是一个非常不幸的行为。

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    throw new Exception("OMG!");
}

上面的代码将取消导航并吞下异常。

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    try
    {
        e.Cancel = true;
        if (actions.ContainsKey(e.Url.ToString()))
        {
            actions[e.Url.ToString()].Invoke(e.Url, webBrowser.Document);
        }
    }
    catch (Exception exception)
    {
        MessageBox.Show(exception.ToString());
    }
}

因此,我要做的(上面)是捕获所有异常并弹出一个框,这比默默地失败更好,但仍然显然不理想。我希望它通过正常的应用程序故障路径重定向异常,以便最终使其无法处理或者由应用程序从根目录处理。

有什么方法可以告诉WebBrowser控件停止接收异常,而仅以自然和预期的方式转发它们?还是有一些骇人听闻的方法可以通过本机边界引发异常?

解决方案

回答

除非我们是指脚本错误,否则我还没有看到浏览器吃异常。可以通过browser.ScriptErrorsSuppressed属性启用脚本错误。

如果我们在谈论真正的异常,而不仅仅是脚本错误,我们可以向我们展示一些重现该问题的代码吗?我们已经广泛使用了浏览器,但是还没有看到我们所描述的内容。

当我要求一个代码示例时,编辑代码示例不存在

回答

我之所以能做到这一点,最好的选择是因为有一个本机管理的本机边界需要越过。本机部分无法正确转发托管异常,因此无法完成很多工作。

我仍然希望有一个更好的答案。