2008-11-08 11 views
6

Я пишу приложение C# с помощью элемента управления WebBrowser, и я хочу, чтобы весь контент, который я показываю, поступает из встроенных ресурсов, а не из статических локальных файлов, а не из удаленных файлов.C# WebBrowser HTML со ссылками на скрипты и изображения

Установки исходного текста элемент управления встроенной 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"/> и т. д., не работают. Я нашел похожие вопросы here и here, но ни один из них не спрашивает точно Что я имею в виду, а именно ссылаясь на вложенные ресурсов в exe, а не файлы.

Я пробовал res://... и с помощью <base href='...", но ни один из них не работал (хотя, возможно, у меня все не так).

Возможно (по моему собственному предложению на this question), использование небольшого встроенного веб-сервера C# - единственный способ ... но я бы подумал, что есть какой-то трюк, чтобы добиться этого?

Спасибо!

ответ

1

Я вижу три пути, чтобы получить это происходит:

1: записать файлы, необходимые для плоских файлов в области темпа, перемещаться по WebBrowser в HTML файл, и удалить их, как только страница загружена

2: как вы говорите, встроенный веб-сервер - herhaps HttpListener - но обратите внимание, что это использует HTTP.SYS, и поэтому требует администратор специальных разрешения (или вам нужно pre-open the port)

3: как 1, но с использованием named-pipe server, чтобы избежать записи файла

Должен сказать, что первый намного проще и требует нулевой конфигурации.

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

 Смежные вопросы

  • Нет связанных вопросов^_^