【问题标题】:C# WebBrowser HTML with references to scripts and imagesC# WebBrowser HTML 与脚本和图像的引用
【发布时间】:2010-09-21 10:03:34
【问题描述】:

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

将控件的初始文本设置为嵌入的 HTML 文件非常适用于受this 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、<img src="whatever.png"/> 等图像都不起作用。我发现了类似的问题herehere,但两者都没有问确切我的意思,即引用exe 中的嵌入 资源,而不是文件。

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

也许(按照我自己对 this question 的建议),使用一个小的嵌入式 C# 网络服务器是唯一的方法......但我会认为有一些技巧可以实现这一点?

谢谢!

【问题讨论】:

    标签: c# .net webserver resources href


    【解决方案1】:

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

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

    2:正如你所说,一个嵌入式网络服务器 - 也许是 HttpListener - 但请注意,这使用 HTTP.SYS,因此需要管理员权限(或者你需要 pre-open the port

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

    不得不说,第一种简单很多,需要零配置。

    【讨论】:

      【解决方案2】:
      /// 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());
            }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-17
        • 2020-06-28
        • 2011-03-16
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        相关资源
        最近更新 更多