【问题标题】:HRESULT E_FAIL in UnsafeNativeMethods.IWebBrowser2.Navigate2UnsafeNativeMethods.IWebBrowser2.Navigate2 中的 HRESULT E_FAIL
【发布时间】:2012-02-19 01:21:30
【问题描述】:

我们在 Office 2007 中使用 .NET 3.5 开发了一个复杂的应用程序。在某些表单中,我们使用 WebBrowser 控件导航到我们的 HTML 页面。问题是,在某些机器上,当控件调用“导航”方法时,它会引发异常“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回”。

从堆栈跟踪中我们注意到,调用 Navigate 方法时异常来自 WebBrowser 控件:

 in System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2
(Object& URL, Object& flags, Object& targetFrameName, Object& postData,
Object& headers)
  in System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object&
flags, Object& targetFrameName, Object& postData, Object& headers)
  in System.Windows.Forms.WebBrowser.PerformNavigateHelper(String
urlString, Boolean newWindow, String targetFrameName, Byte[] postData,
String headers)
  in System.Windows.Forms.WebBrowser.set_Url(Uri value)
  in System.Windows.Forms.WebBrowser.set_DocumentStream(Stream value)
  in System.Windows.Forms.WebBrowser.set_DocumentText(String value)

PC 是带有 IE8 和 Office 2007 Service Pack 2 的 VISTA。我们使用 Visual Studio 2010 和 VSTO 3.0。

非常感谢

【问题讨论】:

    标签: c# winforms vsto


    【解决方案1】:

    当网页包含关闭窗口的 JavaScript 代码时,我观察到了这种行为。

    复制很简单,在您的 WebBrowser 控件中打开如下 HTML 文件:

    <html>
    <head></head>
    <body>
    <a href="javascript:window.close();">close</a>
    <!-- or a version without further user interaction -->
    <a href="javascript:window.open('','_self').close();">close without request</a>
    </body>
    </html>
    

    单击该链接,然后将您的 WebBrowser 控件导航到另一个 URL。

    这将导致Navigate2函数抛出异常error HRESULT E_FAIL has been returned from a call to a COM component,因为在关闭窗口时底层的ActiveX组件被释放了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多