C#WebBrowser HTML,引用脚本和图像

我正在使用WebBrowser控件编写一个C#应用程序,我希望我显示的所有内容都来自嵌入式资源 – 而不是静态本地文件,而不是远程文件。

将控件的初始文本设置为嵌入式HTML文件非常适合此post启发的此代码:

browser.DocumentText=loadResourceText("myapp.index.html"); private string loadResourceText(string name) { Assembly assembly = Assembly.GetExecutingAssembly(); Stream stream = assembly.GetManifestResourceStream(name); StreamReader streamReader = new StreamReader(stream); String myText = streamReader.ReadToEnd(); return myText; } 

就像那样,HTML-javascript中引用的文件,如等图像不起作用。 我在这里和这里找到了类似的问题,但两者都没有问我的意思,即在exe中引用嵌入式资源,而不是文件。

我尝试了res://...并使用<base href='..."但似乎都没有工作(尽管我可能没有做对)。

也许(按照我自己对这个问题的建议),使用一个小的嵌入式C#网络服务器是唯一的方法……但我会想到有一些技巧可以实现这一目标吗?

谢谢!

我可以看到三种方法来实现这一目标:

1:将您需要的文件写入临时区域中的平面文件,将WebBrowser导航到html文件,并在页面加载后删除它们

2:正如你所说,一个嵌入式web服务器 – 也许是HttpListener – 但请注意,这使用HTTP.SYS,因此需要管理员权限(或者你需要预先打开端口 )

3:像1一样,但使用命名管道服务器来避免写入文件

我不得不说,第一个更简单,需要零配置。

 /// Hi try this may help u. private string CheckImages(ExtendedWebBrowser browser) { StringBuilder builderHTML = new StringBuilder(browser.Document.Body.Parent.OuterHtml); ProcessURLS(browser, builderHTML, "img", "src"); ProcessURLS(browser, builderHTML, "link", "href"); // ext... return builderHTML.ToString(); } private static void ProcessURLS(ExtendedWebBrowser browser, StringBuilder builderHTML, string strLink, string strHref) { for (int k = 0; k < browser.Document.Body.Parent.GetElementsByTagName(strLink).Count; k++) { string strURL = browser.Document.Body.Parent.GetElementsByTagName(strLink)[k].GetAttribute(strHref); string strOuterHTML = browser.Document.Body.Parent.GetElementsByTagName(strLink)[k].OuterHtml; string[] strlist = strOuterHTML.Split(new string[] { " " }, StringSplitOptions.None); StringBuilder builder = new StringBuilder(); for (int p = 0; p < strlist.Length; p++) { if (strlist[p].StartsWith(strHref)) builder.Append (strlist[p].Contains("http")? strlist[p] + " ": (strURL.StartsWith("http") ? strHref + "=" + strURL + " ": strHref + "= " + "http://xyz.com" + strURL + " " )); else builder.Append(strlist[p] + " "); } builderHTML.Replace(strOuterHTML, builder.ToString()); } }