C# 为什么通过WebBrowser从硬盘加载html文件时,没有显示所有内容?

C# 为什么通过WebBrowser从硬盘加载html文件时,没有显示所有内容?,c#,winforms,C#,Winforms,我有这个代码,我正在下载一个网站的HTML文件,并保存到我的硬盘上。 在构造函数中: var uri = new Uri("http://www.walla.co.il"); 然后: DownloadHtml(); private void DownloadHtml() { using (var client = new WebClient()) { client.DownloadFile(web

我有这个代码,我正在下载一个网站的HTML文件,并保存到我的硬盘上。 在构造函数中:

var uri = new Uri("http://www.walla.co.il");
然后:

DownloadHtml();

private void DownloadHtml()
        {
            using (var client = new WebClient())
            {
                client.DownloadFile(webSite, OriginalHtmlFilePath);
            }
        }
然后,在对下载的html文件执行某些操作后,我将使用WebBrowser加载该文件:

string html = File.ReadAllText(ScrambledHtmlFilePath);
webBrowser1.DocumentText = html;
例如,如果网站是 我用网络浏览器加载它没有问题。 例如,如果站点是 当我用网络浏览器加载它时,一些图像和其他东西不会显示出来

在这两个网站上,当我用浏览器加载它们时,我会发现很多脚本错误,我必须多次单击“是”以继续加载页面

脚本错误

此页上的脚本中出现错误

线 烧焦

是否要继续在此页上运行脚本

然后我选择yes,直到页面加载为止。 如果html文件是cnn.com内容,在做了许多“是”之后,页面加载良好

但是如果html文件是希伯来语,例如walla.co.il,那么在最后多次单击YES之后,我会看到:


原来的网站一点也不像这样。

当你下载页面时,你就下载了该页面的源代码。但是,当您的浏览器下载页面时,会有很多内容随HTML一起下载。例如,有JavaScript文件、CSS文件(用于样式)等等。即使您也下载了它们,您也可能需要修改HTML,以使用相对或绝对路径(取决于您的需要)将这些文件链接到HTML

换言之,由于附件未下载并链接到HTML,因此网页未按预期显示

更新 当您设置文档的源时,不会找到与HTML相关的附加文档(css、js等),因此不会在网页中使用。例如:

<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=a25094f085c0">

无论从何处加载,都将工作,但:

<link rel="stylesheet" type="text/css" href="/css/all.css">

不会的

更新2
这正是导致脚本错误的原因。浏览器找不到部分(或大部分,甚至全部)附加脚本(
.js
标记中的文件),当它尝试运行JavaScript代码时,失败。

问题是相对路径与绝对路径

当浏览器显示HTML页面时,它还需要检索图像、css表单和javascript等内容。由于HTML文件中的说明,它知道在哪里可以找到这些东西。有时,HTML指令包含相对路径,而不是绝对路径。当存在相对路径且没有关于页面原始位置的其他提示时,web浏览器必须以页面的当前位置或上下文为基础,为页面上的每个相对项构建完整路径。在本例中,您只有一个字符串变量,因此没有上下文


您可以在下载的html文件的头部分添加
base
标记(如果尚未存在)来改进此功能,指示页面的原始位置并帮助浏览器知道如何处理相对链接。

因此,我通过web浏览器加载的所有网站都有两个问题,我收到了很多脚本错误。在希伯来语网站或像walla.co.il这样的网站上,我得到的是这张图片,而不是原来的网站。