2008-11-08 19 views
6

मैं वेबब्रोसर नियंत्रण का उपयोग कर एक सी # ऐप लिख रहा हूं, और मैं चाहता हूं कि मैं सभी सामग्री को एम्बेडेड संसाधनों से आऊं - स्थिर स्थानीय फाइलें नहीं, और दूरस्थ फाइल नहीं।सी # वेबब्रोसर एचटीएमएल स्क्रिप्ट्स और छवियों के संदर्भों के साथ

एक एम्बेडेड 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 में करने के लिए भेजा - जावास्क्रिप्ट, <img src="whatever.png"/> तरह छवियों आदि, काम नहीं करते हैं। मुझे here और here समान प्रश्न मिलते हैं, लेकिन न तो बिल्कुल पूछ रहा है, जिसका मतलब है कि संसाधनों को एक्सई में एम्बेड किया गया है, फाइल नहीं।

मैंने res://... की कोशिश की और <base href='..." का उपयोग किया लेकिन न तो काम करना प्रतीत होता था (हालांकि मुझे यह सही नहीं मिला)।

शायद (this question पर अपने स्वयं के सुझाव के बाद), थोड़ा एम्बेडेड सी # वेबसर्वर का उपयोग करना एकमात्र तरीका है ... लेकिन मैंने सोचा होगा कि यह जाने के लिए कुछ चाल है?

धन्यवाद!

1:

उत्तर

1

मैं तीन तरीके इस चलते रहने के लिए देख सकते हैं फ़ाइलों को आप अस्थायी क्षेत्र में फ्लैट फ़ाइलें करने की जरूरत है लिखते हैं, नेविगेट html फ़ाइल को WebBrowser, और एक बार पेज

लोड होते ही उन्हें हटा दें

2: आप कहते हैं के रूप में, एक एम्बेडेड वेब सर्वर - herhaps HttpListener - लेकिन ध्यान दें कि इस http.sys का उपयोग करता है, और इसलिए की आवश्यकता है व्यवस्थापक विशेषाधिकार (या आप pre-open the port करने की जरूरत है)

3: 1 की तरह है, लेकिन का उपयोग कर एक फ़ाइल लिखने से बचने के लिए नामित पाइप सर्वर

मुझे कहना है, पहला बहुत आसान है और शून्य कॉन्फ़िगरेशन की आवश्यकता है।

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()); 
     } 
} 
संबंधित मुद्दे