2008-11-08 27 views
6

Escribo una aplicación C# usando el control WebBrowser, y quiero que todo el contenido que muestre proceda de recursos incrustados, no archivos locales estáticos ni archivos remotos.C# WebBrowser HTML con referencias a scripts e imágenes

Ajuste del texto inicial del control a un archivo HTML incrustado funciona muy bien con este código inspirado en 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; 
} 

Tan bueno como sea, los archivos se hace referencia en el código HTML - Javascript, imágenes como <img src="whatever.png"/> etc, no funciona Encontré preguntas similares here y here, pero ninguna pregunta exactamente lo que quiero decir, es decir, refiriéndose a incrustado recursos en el archivo ejecutable, no archivos.

Probé res://... y usando un <base href='..." pero ninguno parecía funcionar (aunque puede que no lo haya hecho bien).

Tal vez (siguiendo mi propia sugerencia en this question), usar un pequeño servidor web C# incrustado es la única manera ... pero hubiera pensado que hay algún truco para poner esto en marcha?

Gracias!

Respuesta

1

puedo ver tres maneras de conseguir este curso:

1: escribir los archivos que necesita para archivos planos en la zona temporal, navegar por el WebBrowser al archivo html, y eliminarlos una vez que la página se ha cargado

2: como usted dice, un servidor web integrado - herhaps HttpListener - pero tenga en cuenta que este utiliza HTTP.SYS, y por lo tanto requiere privilegios de administrador (o necesita pre-open the port)

3: igual que 1, pero utilizando named-pipe server para evitar escribir un archivo

Tengo que decir que la primera es mucho más simple y no requiere configuración.

0
/// 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()); 
     } 
} 
Cuestiones relacionadas