【问题标题】:How to load mht from stream/string into a WebBrowser control?如何将流/字符串中的 mht 加载到 WebBrowser 控件中?
【发布时间】:2011-01-16 11:48:42
【问题描述】:

如果我使用Navigate 方法,WebBrowser 控件会正确加载任何mht 文件,但是当我使用DocumentTextDocumentStream 属性时,mht文件显示就像我在记事本中打开文件一样。

如果我将流写入临时文件然后导航到它,它可以正常工作,但我不想这样做。

这个问题似乎很常见,但我没有找到可行的解决方案。 Some people 建议我应该通过实现 IPersistMoniker com 接口来欺骗 IE,...等等。我已经尝试了一点,但不幸的是我得到了相同的结果。可能是我做错了什么。我仍然觉得他们应该是一个更直接的解决方案(除了先保存在临时文件中),知道吗?

【问题讨论】:

    标签: c# .net winforms webbrowser-control mhtml


    【解决方案1】:

    我记得几年前我也遇到过同样的问题,虽然我搜索了解决方案,但我没有找到任何解决方案。最后,我选择了临时文件方法。祝你好运,如果有答案我也想知道。

    【讨论】:

    • 虽然我在我的问题中声明我不想要临时文件方法,但我最终还是应该使用它!我通过使用 HttpListener msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 实现一个简单的 Web 服务器成功地欺骗了 WebBrowser 控件,但最后我发现 WebBrowser 本身将文件保存在“临时 Internet 文件”中!为简单起见,我将自己保存文件并在加载完成后将其删除。
    • 哈哈 :) 嗯,会有很多失败点。我希望你不打算做任何重要的事情。否则,恭喜:)
    【解决方案2】:

    我们在 vb.net 中使用过

    Response.ContentType = "message/rfc822" 
    Dim ByteDocBlob() As Byte = cwWebUtil.ConvertLocalFileToByteArray(FilePath, True)
    Dim HTMLText As String = System.Text.Encoding.UTF8.GetString(ByteDocBlob)
    Response.Write(HTMLText)
    Response.End()
    

    问题只是 IE 似乎接受它。

    【讨论】:

    • 响应仅在 Web 应用程序上下文中有效。 OP 说的是 WinForms 中使用的控件,而不是 web。
    【解决方案3】:
    var uri = new Uri(String.Format("file:///{0}", Path.GetFullPath(source)));
    wbMain.Navigate(uri);
    

    where source - .mht 文件的路径

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多