2008-10-06 12 views
35

मेरे vb.net प्रोग्राम में, मैं उपयोगकर्ता को एक HTML पूर्वावलोकन दिखाने के लिए एक वेबब्रोसर का उपयोग कर रहा हूं। मैं पहले एचटीएमएल को पकड़ने के लिए एक सर्वर पर टक्कर मार रहा था, फिर एक एसिंक्रोनस थ्रेड पर लौट रहा था और WebBrowser को पॉप्युलेट करने के लिए एक ईवेंट को बढ़ा रहा था। HTML स्ट्रिंग के साथ दस्तावेज़ टेक्स्ट मैं वापस लौटा रहा था।.Net WebBrowser.DocumentText बदल नहीं रहा है!

अब मैं इसे सेट अप कभी सर्वर हिट करने के लिए बिना, ग्राहक के बारे में जानकारी के सभी हड़पने के लिए, और मैं एक ही घटना को बढ़ाने के लिए कोशिश कर रहा हूँ। मैं देखने के कोड के माध्यम से जाना है, और यह एचटीएमएल स्ट्रिंग सही है और सब कुछ है, लेकिन के रूप में "<HTML></HTML>"

मैं सिर्फ क्यों सोच रहा था DocumentText रहने जब मैं

browser.DocumentText = _emailHTML 

DocumentText की सामग्री को करने की कोशिश सेट नहीं किया जा रहा था। किसी के पास कोई सुझाव है?

browser.Navigate("about:blank"); 
HtmlDocument doc = browser.Document; 
doc.Write(String.Empty); 
browser.DocumentText = _emailHTML; 

मैंने पाया कि WebBrowser नियंत्रण आमतौर पर वैसे भी about:blank के लिए शुरू किए जाने की जरूरत:

उत्तर

49

का अनुसरण करें। नेविगेट्स के बीच विभिन्न प्रकार की सामग्री (जैसे टेक्स्ट/एक्सएमएल टू टेक्स्ट/एचटीएमएल) के बीच भी किया जाना चाहिए क्योंकि रेंडरर अलग है (टेक्स्ट/एचटीएमएल के लिए एमएसटीएमएल, टेक्स्ट/एक्सएमएल के लिए कुछ और)।

(http://geekswithblogs.net/paulwhitblog/archive/2005/12/12/62961.aspx के माध्यम से)

+5

मैं सहायता की सराहना करता हूं। बाहर निकलता है मैं इसे ब्राउज़र के साथ प्राप्त करने में सक्षम था। दस्तावेज़। ओपनन्यू (सत्य) आप सही हैं - मुझे इसे आरंभ करने की आवश्यकता है। –

+1

कमाल। अच्छा लगाव –

+2

क्यों दस्तावेज़। टेक्स्ट के बाद doc.Write = ...? क्या यह सिर्फ ब्राउज़र करने के लिए पर्याप्त नहीं है। दस्तावेज़। राइट (_emailHTML) ;? – Nikodemus

1

बस हमारे पुराने कोड में से कुछ में इस देखा।

_webBrowser.DocumentText = builder.WriteToString(...); 

Application.DoEvents(); 

जाहिर है एक DoEvents भी

+0

यह आश्चर्य की बात नहीं है कि यह काम कर सकता है, लेकिन जब भी संभव हो तो मैं DoEvents का उपयोग करने से बचने की सलाह दूंगा। यह संदेश लूप को सब कुछ रोकने और कतार में सभी संदेशों को संसाधित करने के लिए कहता है। Http://www.codinghorror.com/blog/2004/12/is-doevents-evil.html देखें। –

0

का संदर्भ लें Application.DoEvents() एक WinForms परियोजना में इसे ठीक है, यह एक WPF परियोजना में अप्रासंगिक था में ब्राउज़र की शुरूआत की।

मुझे अंत में webBrowser.Write(htmlContent) (webBrowser.DocumentText = htmlContent के बजाय) का उपयोग करके काम करने के लिए मिला।

0

यह हमेशा

using mshtml; 


private IHTMLDocument2 Document 
{ 
    get 
    { 
     if (Browser.Document != null) 
     { 
      return Browser.Document.DomDocument as IHTMLDocument2; 
     } 

     return null; 
    } 
} 


if (Document == null) 
{ 
    Browser.DocumentText = Contents; 
} 
else 
{ 
    Document.body.innerHTML = Contents; 
} 
31

मैं निम्नलिखित मिल गया है और यह काम किया काम करता है!

webBrowser.Navigate("about:blank"); 
    webBrowser.Document.OpenNew(false); 
    webBrowser.Document.Write(html); 
    webBrowser.Refresh(); 
+1

यह वह है जो मेरे लिए काम करता है। एकमात्र चीज जिसे मैं याद कर रहा था वह ताज़ा था। –

+0

एक आकर्षण की तरह काम करता है ... यहां तक ​​कि AllowNav = false –

+1

के साथ दुर्भाग्यवश यह 'दस्तावेज़ पूर्ण' ईवेंट नहीं बढ़ाएगा। –

0

सुनिश्चित करें कि आप की घटना WebBrowser के लिए के बारे में नेविगेट करना बंद नहीं करते कि बनाओ: खाली पेज। वेबब्रोसरपर नेविगेट करता है: दस्तावेज़टेक्स्ट सेट करने से पहले खाली।,

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
{ 
    if(e.Url.OriginalString.StartsWith("about:")) 
    { 
     return; 
    } 
    e.Cancel = true; 
    // ... 
} 
8

मैं सबसे अच्छा तरीका यह संभाल करने के लिए पाया जाता है इस प्रकार है:: तो आप खुद ही लिंक को प्रबंधित करना चाहते हैं तो आप घटना नेविगेट के हैंडलर निम्नलिखित बनाने की जरूरत

if (this.webBrowser1.Document == null) 
{ 
    this.webBrowser1.DocumentText = htmlSource; 
} 
else 
{ 
    this.webBrowser1.Document.OpenNew(true); 
    this.webBrowser1.Document.Write(htmlSource); 
} 
+0

अन्य ब्लॉक में रीफ्रेश() डालना याद रखें। – ThunderGr

1

कि मेरे लिए काम किया:

webBrowser.Navigate("about:blank"); 
webBrowser.Document?.Write(htmlString); 
संबंधित मुद्दे