为什么WebBrowser控件在保存后不能正确显示HTML

Why does the WebBrowser control not display HTML correctly after it has been saved?

本文关键字:显示 HTML 不能 WebBrowser 控件 保存 为什么      更新时间:2023-09-26

我读了很多相关的答案,但我仍然没有发现问题。我认为MY的问题是我没有很好地掌握HTML和潜在的javascript的基础知识。我说的是它们是如何结合在一起并运行的,而不是特定的语言语法。也许有人能给我一个全面的解释,说明这里出了什么问题。

我使用一个简单的WebBrowser控件导航到一个网页。这将使所有内容都能正确显示。现在,我想在机器上本地保存HTML内容,稍后再次打开它,然后在另一个WebBrowser控件中呈现它。到目前为止,这还没有奏效。页面呈现得很简短,但没有图像和效果,然后我得到了一个关于脚本的例外。所以我决定做一个非常简单的测试。我会从浏览器中获取HTML,然后立即将文本读回浏览器。

成功导航到页面后,我得到如下HTML文本:

string html = myWebBrowser.DocumentText;

然后,我立即将DocumentText属性设置为其原始值。

myWebBrowser.DocumentText = html;

这会给我带来与其他应用程序读取保存的HTML相同的错误和效果。那么这里发生了什么?浏览器最初成功地显示了所有内容,但随后提取并重新加载HTML文本会破坏所有内容。我一定错过了一个非常明显和基本的概念。是否WebBrowser控件的DocumentText属性实际上并没有返回原始HTML代码,而是返回了修改后的版本?还是该属性的设置修改了某些内容?两者都不是吗?感谢所有能让我理解这一切的人。

这是经过设计的。HTML不是一个完全包含的文件。浏览器将解析html,并从其他url中提取资源,包括脚本、图像、样式等。如果只保存html,然后在浏览器中打开该文件,许多资源将找不到,因为它们依赖于从相对于html文件的位置加载的html。一旦文件在您的计算机上,到资源的任何相对链接都将无效,导致浏览器只显示基本html和由绝对路径而非相对路径引用的任何资源。