2008-11-08 9 views
6

J'écris une application C# en utilisant le contrôle WebBrowser, et je veux que tout le contenu que j'affiche provienne de ressources intégrées - pas de fichiers locaux statiques, et pas de fichiers distants.C# WebBrowser HTML avec des références aux scripts et images

Réglage du texte initial de la commande dans un fichier HTML intégré fonctionne très bien avec ce code inspiré par 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; 
} 

Aussi bon que c'est, les fichiers mentionnés dans le HTML - javascript, des images comme <img src="whatever.png"/> etc, ne fonctionne pas. J'ai trouvé des questions similaires here et here, mais ni demande exactement ce que je veux dire, à savoir se référant à intégré ressources dans l'exe, pas de fichiers.

J'ai essayé res://... et en utilisant un <base href='..." mais aucun ne semblait fonctionner (même si je n'ai peut-être pas compris). Peut-être (en suivant ma propre suggestion sur this question), en utilisant un petit serveur web C# est le seul moyen ... mais j'aurais pensé qu'il y avait un truc pour que ça marche?

Merci!

Répondre

1

Je peux voir trois façons d'obtenir ce cours:

1: écrire les fichiers dont vous avez besoin de fichiers plats dans la zone de température, naviguer dans le WebBrowser au fichier html, et les supprimer une fois la page chargée

2: comme vous le dites, un serveur web embarqué - herhaps HttpListener - mais notez que celui-ci utilise HTTP.SYS, et exige d'administration des privilèges (ou vous devez pre-open the port)

3: comme 1, mais en utilisant serveur named-pipe pour éviter d'écrire un fichier

Je dois dire que le premier est beaucoup plus simple et ne nécessite aucune configuration.

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()); 
     } 
} 
Questions connexes