studio - C#WebBrowser HTML con referencias a scripts e imágenes
visual studio installer (2)
Estoy escribiendo una aplicación C # utilizando el control WebBrowser, y quiero que todo el contenido que muestre venga de recursos incrustados, no archivos locales estáticos ni archivos remotos.
Establecer el texto inicial del control en un archivo HTML incrustado funciona muy bien con este código inspirado en esta publicación :
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 eso, los archivos a los que se hace referencia en el HTML - javascript, imágenes como <img src="whatever.png"/>
etc., no funcionan. Encontré preguntas similares aquí y aquí , pero ninguna pregunta exactamente a qué me refiero, a saber, referirme a los recursos incrustados en el archivo ejecutable, no a los archivos.
Intenté res://...
y usando un <base href=''..."
pero ninguno pareció funcionar (aunque puede que no lo haya hecho bien).
Tal vez (siguiendo mi propia sugerencia sobre esta cuestión ), usar un pequeño servidor web incrustado de C # es la única manera ... pero hubiera pensado que hay algún truco para poner esto en marcha.
¡Gracias!
/// 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());
}
}
Puedo ver tres formas de poner esto en marcha:
1: escriba los archivos que necesita para planos en el área de temperatura, navegue en WebBrowser
al archivo html y elimínelos una vez que la página se haya cargado
2: como dices, un servidor web incorporado - herhaps HttpListener
- pero ten en cuenta que esto usa HTTP.SYS, y por lo tanto requiere privilegios de administrador (o necesitas pre-abrir el puerto )
3: como 1, pero usando el servidor named-pipe para evitar escribir un archivo
Debo decir que el primero es mucho más simple y no requiere configuración.