2009-09-18 8 views
8

हमारे पास हमारे Winforms ऐप में एक वेब ब्राउज़र है जो xslt द्वारा प्रदान किए गए किसी चयनित आइटम का इतिहास प्रदर्शित करने के लिए है।सी # वेबब्राउज़र नियंत्रण में एंकरों पर नेविगेट करें

xslt < > आउटपुट एचटीएमएल में टैग लिख रहा है ताकि वेब ब्राउजर नियंत्रण चयनित इतिहास प्रविष्टि पर नेविगेट कर सके।

चूंकि हम सख्त वेब भावना में एचटीएमएल में 'नेविगेट नहीं' कर रहे हैं, बल्कि दस्तावेज़ टेक्स्ट द्वारा एचटीएमएल को सेट करने के लिए, मैं # एन्चोरनाम के साथ वांछित एंकरों पर 'नेविगेट' नहीं कर सकता, क्योंकि वेब ब्राउजर का यूआरएल शून्य है (संपादित करें: वास्तव में पूरा होने पर यह लगभग खाली है)।

इस मामले में वेब ब्राउज़र नियंत्रण के एचटीएमएल में मैं एंकर टैग्स को गतिशील रूप से कैसे जा सकता हूं?

संपादित करें:

टिप के लिए धन्यवाद sdolphion, इस अंतिम कोड मैं

void _history_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     _completed = true; 
     if (!string.IsNullOrEmpty(_requestedAnchor)) 
     { 
      JumpToRequestedAnchor(); 
      return; 
     } 
    } 

    private void JumpToRequestedAnchor() 
    { 
     HtmlElementCollection elements = _history.Document.GetElementsByTagName("A"); 
     foreach (HtmlElement element in elements) 
     { 
      if (element.GetAttribute("Name") == _requestedAnchor) 
      { 
       element.ScrollIntoView(true); 
       return; 
      } 
     } 
    } 

उत्तर

10

इस्तेमाल किया मुझे यकीन है कि किसी को ऐसा करने का एक बेहतर तरीका है, लेकिन यहाँ हूँ कि मैं क्या करने के लिए इस्तेमाल किया जाता है इस काम को पूरा करें।

HtmlElementCollection elements = this.webBrowser.Document.Body.All; 
foreach(HtmlElement element in elements){ 
    string nameAttribute = element.GetAttribute("Name"); 
    if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == section){ 
     element.ScrollIntoView(true); 
     break; 
    } 
} 
+0

के शीर्ष के साथ संरेखित के बस इस ऑनलाइन के लिए एक संदर्भ पाया और अब यह परीक्षण कर रहा हूँ। जब मैं इसकी पुष्टि करता हूं तो उत्तर के रूप में चिह्नित होगा। – johnc

+0

हालांकि मैं लूप – johnc

+0

के बजाय Document.GetElementByName का उपयोग कर रहा हूं, लेकिन अपने अपडेट को वापस पोस्ट करने के लिए धन्यवाद, मैंने अपना बदलकर मेरा मिलान किया है। – sdolphin

5

मैं जानता हूँ कि इस सवाल पुराना है और एक महान जवाब है, लेकिन यह अभी तक का सुझाव दिया नहीं किया गया है, तो यह दूसरों कि यहाँ एक जवाब की तलाश में आते हैं के लिए उपयोगी हो सकता है।

ऐसा करने का एक और तरीका HTML में तत्व आईडी का उपयोग करना है।

<p id="section1">This is a test section</p>

तो फिर तुम

HtmlElement sectionAnchor = webBrowserPreview.Document.GetElementById("section1"); 
if (sectionAnchor != null) 
{ 
    sectionAnchor.ScrollIntoView(true); 
} 

उपयोग कर सकते हैं जहां webBrowserPreview अपने WebBrowser नियंत्रण है।

वैकल्पिक रूप से, sectionAnchor.ScrollIntoView(false) के बजाय केवल स्क्रीन पर तत्व लाएगा पेज

+0

मेरी अज्ञानता क्षमा करें। 'WebBrowserPreview' कहां परिभाषित किया जाता है? –

+1

वाह, विश्वास नहीं कर सकता कि मुझे याद आया और अब कोई भी पहले नहीं देखा। यह आपके रूप में एक वेब ब्राउज़र नियंत्रण है। मैंने अपने उत्तर में स्पष्टीकरण जोड़ा है। – dbooher

संबंधित मुद्दे