2010-07-13 27 views
5

Tôi gặp sự cố khi cố lấy tiêu đề tài liệu từ Trình duyệt web trong C#. Nó hoạt động tốt trong VB.NET, nhưng nó sẽ không cho tôi bất kỳ thuộc tính nào trong C#.C#: Làm cách nào để lấy tiêu đề tài liệu từ phần tử WebBrowser?

Khi tôi nhập MyBrowser.Document., các tùy chọn duy nhất tôi nhận được là 4 phương pháp: Bằng, GetHashCode, GetType và ToString - không có thuộc tính.

Tôi nghĩ rằng đó là vì tôi phải gán tài liệu cho một cá thể mới trước, nhưng tôi không thể tìm thấy lớp HTMLDocument tồn tại trong VB.NET.

Về cơ bản những gì tôi muốn làm là trả lại Document.Title mỗi khi Trình tải trang web tải/tải lại trang.

Ai đó có thể giúp bạn không? Nó sẽ được nhiều đánh giá cao!

Đây là mã tôi có vào lúc này ...

private void Link_Click(object sender, RoutedEventArgs e) 
{ 
    WebBrowser tempBrowser = new WebBrowser(); 
    tempBrowser.HorizontalAlignment = HorizontalAlignment.Left; 
    tempBrowser.Margin = new Thickness(-4, -4, -4, -4); 
    tempBrowser.Name = "MyBrowser"; 
    tempBrowser.VerticalAlignment = VerticalAlignment.Top; 
    tempBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(tempBrowser_LoadCompleted); 

    tempTab.Content = tempBrowser; // this is just a TabControl that contains the WebBrowser 

    Uri tempURI = new Uri("http://www.google.com"); 
    tempBrowser.Navigate(tempURI); 
} 

private void tempBrowser_LoadCompleted(object sender, EventArgs e) 
{ 
    if (sender is WebBrowser) 
    { 
     MessageBox.Show("Test"); 
     currentBrowser = (WebBrowser)sender; 
     System.Windows.Forms.HtmlDocument tempDoc = (System.Windows.Forms.HtmlDocument)currentBrowser.Document; 
     MessageBox.Show(tempDoc.Title); 
    } 
} 

Mã này không cho tôi bất kỳ lỗi nào, nhưng tôi không bao giờ thấy MessageBox thứ hai. Tôi thấy cái đầu tiên mặc dù (thông báo "Test"), vì vậy chương trình đang đi tới khối mã đó.

+0

Bạn cần một dàn diễn viên làm HTMLDocument. – Mau

+0

Vui lòng cho chúng tôi biết mã của bạn. – SLaks

Trả lời

2

Bạn đang không sử dụng Windows Forms điều khiển WebBrowser. Tôi nghĩ rằng bạn có wrapper COM cho ieframe.dll, tên của nó là AxWebBrowser. Xác minh rằng bằng cách mở nút Tham chiếu trong cửa sổ Solution Explorer. Nếu bạn thấy AxSHDocVw thì bạn có quyền kiểm soát sai. Nó là khá không thân thiện, nó chỉ cung cấp cho bạn một con trỏ giao diện mờ cho thuộc tính Document. Bạn thực sự sẽ chỉ nhận được các thành viên lớp đối tượng mặc định.

Tìm trong hộp công cụ. Chọn WebBrowser thay vì "Microsoft Web Browser".

+0

Hans, Solution Explorer hiển thị SHDocVw. Ứng dụng của tôi nằm trong WPF và tôi chỉ sử dụng trình điều khiển WebBrowser mặc định trong đó. Tôi có cần phải thêm tham chiếu "using System.Windows.Forms" và sử dụng WebBrowser đó không? –

+0

Vâng, đó là nó sau đó. Kiểm tra điều này: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/e60b671e-84e6-40a4-a37a-e0a8610aef44 –

+0

Cảm ơn, tôi sẽ xem xét liên kết và xem tôi có thể làm gì. Những gì tôi thấy lạ, tuy nhiên, là tôi đã làm việc nhiều hơn một chút về mã hiện tại của tôi, và tôi không nhận được bất kỳ lỗi nào, nhưng tôi không nhận được những gì tôi có nó cố gắng để làm một trong hai. Bạn có thể xem mã trong bài đăng đã chỉnh sửa của tôi ở trên và xem liệu có bất kỳ điều gì có thể xảy ra với nó không? Nó có thể là nó chỉ là không thể, nhưng tôi sẽ nghĩ rằng nó sẽ cho tôi một thông báo lỗi nếu đó là trường hợp. –

0
string title = ((HTMLDocument)MyBrowser.Document).Title 

Hoặc

HTMLDocument Doc = (HTMLDocument)MyBrowser.Document.Title ; 
string title = doc.Title; 
4

Thêm tham chiếu đến Microsoft.mshtml

Thêm nhận sự kiện cho LoadCompleted

webbrowser.LoadCompleted += new LoadCompletedEventHandler(webbrowser_LoadCompleted); 

Sau đó, bạn sẽ không có vấn đề với tài liệu không được nạp để đọc các giá trị trở ra

void webbrowser_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     // Get the document title and display it 
     if (webbrowser.Document != null) 
     { 
      mshtml.IHTMLDocument2 doc = webbrowser.Document as mshtml.IHTMLDocument2; 
      Informative.Text = doc.title; 
     } 
    } 
0

LoadCompleted không kích hoạt. Bạn nên sử dụng trình xử lý sự kiện được điều hướng thay vì nó.

webBrowser.Navigated += new NavigatedEventHandler(WebBrowser_Navigated); 

(...) 

private void WebBrowser_Navigated(object sender, NavigationEventArgs e) 
{ 
     HTMLDocument doc = ((WebBrowser)sender).Document as HTMLDocument; 

     foreach (IHTMLElement elem in doc.all) 
     { 
      (...) 
     } 
     // you may have to dispose WebBrowser object on exit 
} 
0

Cuối cùng hoạt động tốt với:

using System.Windows.Forms; 

...

WebBrowser CtrlWebBrowser = new WebBrowser(); 

...

CtrlWebBrowser.Document.Title = "Hello World"; 
MessageBox.Show(CtrlWebBrowser.Document.Title); 
Các vấn đề liên quan