2009-09-18 42 views
8

Chúng tôi có trình duyệt web trong ứng dụng Winforms để hiển thị lịch sử độc đáo của một mục được chọn được hiển thị bởi xslt.C# Điều hướng đến các neo trong điều khiển WebBrowser

Xslt đang viết < một thẻ > trong html được xuất để cho phép kiểm soát trình duyệt web điều hướng đến mục nhập lịch sử đã chọn.

Vì chúng tôi không 'điều hướng' với html theo nghĩa nghiêm ngặt, thay vì đặt html bằng DocumentText, tôi không thể 'điều hướng' đến các neo mong muốn bằng #AnchorName, vì url của webBrowser là rỗng (chỉnh sửa: thực sự hoàn thành nó là về: trống).

Làm cách nào để tôi có thể điều hướng động tới các thẻ Neo trong html của điều khiển Trình duyệt web trong trường hợp này?

EDIT:

Cảm ơn sdolphion for the tip, đây là mã cuối cùng tôi đã sử dụng

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

Trả lời

10

Tôi chắc chắn một người nào đó có một cách tốt hơn để làm điều này nhưng đây là những gì tôi sử dụng để hoàn thành nhiệm vụ này.

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

Chỉ cần tìm thấy một tài liệu tham khảo để trực tuyến này và đang thử nghiệm nó ngay bây giờ. Sẽ đánh dấu là câu trả lời khi tôi xác nhận. – johnc

+0

Mặc dù tôi đang sử dụng Document.GetElementByName chứ không phải vòng lặp – johnc

+0

Cảm ơn bạn đã đăng lại bản cập nhật của mình Tôi đã thay đổi tên của tôi để phù hợp hơn với bạn. – sdolphin

5

Tôi biết câu hỏi này là cũ và có một câu trả lời tuyệt vời, nhưng điều này đã không được đề xuất được nêu ra, vì vậy nó có thể có ích cho những người khác mà đến đây tìm kiếm một câu trả lời.

Một cách khác để thực hiện việc này là sử dụng id phần tử trong HTML.

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

Sau đó, bạn có thể sử dụng

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

nơi webBrowserPreview là điều khiển WebBrowser của bạn.

Ngoài ra, sectionAnchor.ScrollIntoView(false) sẽ chỉ mang yếu tố trên màn hình thay vì sắp xếp nó với phía trên cùng của trang

+0

Tha thứ sự thiếu hiểu biết của tôi. 'WebBrowserPreview' được định nghĩa ở đâu? –

+1

Wow, không thể tin rằng tôi đã bỏ lỡ điều đó và không ai để ý trước đây. Đó là một điều khiển WebBrowser trong biểu mẫu của bạn. Tôi đã thêm làm rõ cho câu trả lời của tôi. – dbooher

Các vấn đề liên quan