2009-03-31 34 views
9

Tôi cần sử dụng trình duyệt web trong ứng dụng vì nó giữ nhiệm vụ lặp đi lặp lại từ nhân viên, nhưng có một vấn đề với javascript mở một cửa sổ mới trong IE sau khi nhấp vào neo. Làm thế nào để tôi kiểm soát trình duyệt web để "mở cửa sổ mới" nơi tôi muốn mở nó? Ví dụ trong điều khiển trình duyệt web khác?Làm cách nào để kiểm soát Trình duyệt web luôn mở trang web trong cùng một cửa sổ?

+0

Tôi muốn nghe câu trả lời cho điều này. Nhưng, liệu thành phần đó có phải thông báo cho ứng dụng của bạn rằng một cửa sổ mới sẽ được mở ra không? Sau đó bạn sẽ phải mở cửa sổ mới với một thành phần WebBrowser mới. Có lẽ có một sự kiện? –

+0

Thật không may, neo là "javascript: void (0)" liên kết .. Tôi không biết làm thế nào để giải quyết này – Skuta

+0

Tôi đã sửa bài của tôi – abatishchev

Trả lời

5

Check-out: proof-of-concept of .NET System.Windows.Forms.WebBrowser module using mã nguồn


Kinh nghiệm của tôi về điều khiển đã cho tôi một tầm nhìn rằng vấn đề này có thể cố gắng để được giải quyết trong các bước tiếp theo:

  1. luôn hủy NewWindow sự kiện

  2. bắt all links nhấp

  3. nhưng không phải tất cả liên kết có thể được lưu trữ theo cách này, vì vậy tôi đã quyết định để phân tích tất cả các thẻ <a> bằng tay trên Document Loading Completion

  4. nói chung, kiểm soát này là rất nghèo và đã được thực hiện như vậy bởi Microsoft cố ý. dù có là công cụ mạnh mẽ xung quanh Webrowser.Document.HtmlDocument và namespace MSHTML

  5. một ví dụ về nó sử dụng là HtmlElement.DomElement

    foreach(HtmlElement tag in webBrowser.Document.All)   
    { 
        switch (tag.TagName.ToUpper) 
        { 
        case "A": 
        { 
         tag.MouseUp += new HtmlElementEventHandler(link_MouseUp); 
         break; 
        } 
        } 
    } 
    
    void link_MouseUp(object sender, HtmlElementEventArgs e) 
    { 
        HtmlElement link = (HtmlElement)sender; 
        mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)link.DomElement; 
        switch (e.MouseButtonsPressed) 
        { 
        case MouseButtons.Left: 
        { 
         if ((a.target != null && a.target.ToLower() == "_blank") || 
          e.ShiftKeyPressed || 
          e.MouseButtonsPressed == MouseButtons.Middle) 
         { 
         // add new tab 
         } 
         else 
         { 
         // open in current tab 
         } 
         break; 
        } 
        case MouseButtons.Right: 
        { 
         // show context menu 
         break; 
        } 
        } 
    } 
    

Xem thêm tại liên kết đầu tiên, đó là mã nguồn của cửa sổ chính, có một rất nhiều thao tác khác nhau ở đó!

+0

và Làm thế nào để tôi chèn nó vào ứng dụng của tôi? – Skuta

+0

dotbrowser Không hoạt động với javascript, shiat – Skuta

+0

tuyệt vời, có URL trong A nhưng tôi cần phải phân tích cú pháp nó vì nó là một phần của onclick !!! TUYỆT QUÁ. CẢM ƠN BẠN – Skuta

-1

Có một lỗi trong trường hợp MouseBUttons.Left:

Lỗi 1 điều không thể lọt qua từ một nhãn trường hợp ('trường hợp 1048576:') để C khác: \ Documents and Settings \ từng \ My Documents \ Visual Studio 2005 \ Projects \ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs 64 17 wApp_SurverMonkey

0

Tại sao một câu trả lời phức tạp như Guys? Abatischev, tôi tò mò muốn được nhìn thấy vào bộ não của bạn, nên thú vị ...

Chỉ cần cố gắng này:

Private Sub WB1_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WB1.NewWindow 
    newUrl = WB1.Url.ToString 

    e.Cancel = True 
    WB1.Navigate(newUrl) 
End Sub 

Bây giờ bạn có thể thay đổi dòng thứ hai vào WB2 hoặc bất kỳ thành phần WebBrowser khác trong bất kỳ các biểu mẫu OWN của bạn.

15

Tôi đã tìm thấy một giải pháp đơn giản hoạt động.

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) { 
    e.Cancel = true; 
    WebBrowser1.Navigate(WebBrowser1.StatusText); 
} 
+0

Điều này đã giúp tôi rất nhiều cảm ơn bạn. –

+0

Cảm ơn bạn, Mã này hoạt động tốt (VS 2015, C#). Hiện không có cửa sổ mới. Dễ sử dụng và đoạn trích nhỏ. – user2422690

+0

Giải pháp sáng chói. Cảm ơn Sam. – Neophile

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