Как заставить контроль веб-браузера всегда открывать веб-страницу в одном и том же окне? - PullRequest
9 голосов
/ 31 марта 2009

Мне нужно использовать веб-браузер в моем приложении, так как он хранит повторяющиеся задачи от сотрудников, но есть проблема с JavaScript, который открывает новое окно в IE после нажатия на привязку. Как мне сообщить элементу управления веб-браузера «открыть новое окно», где я хочу, чтобы оно было открыто? Например, в другом веб-браузере?

Ответы [ 4 ]

15 голосов
/ 09 июля 2012

Я нашел простое решение, которое работает.

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
    e.Cancel = true;
    WebBrowser1.Navigate(WebBrowser1.StatusText);
}
5 голосов
/ 31 марта 2009

Проверка: проверка концепции модуля .NET System.Windows.Forms.WebBrowser с использованием исходный код


Мой опыт использования этих элементов управления дал мне представление о том, что эту проблему можно попытаться решить с помощью следующих шагов:

  1. всегда отменять NewWindow событие

  2. catch все ссылки нажатие

  3. но не все ссылки могут быть кэшированы таким образом, поэтому я решил проанализировать все теги <a> вручную на Завершение загрузки документа

  4. в общем, этот элемент управления очень плохой и был сделан Microsoft намеренно. хотя есть мощный набор инструментов вокруг Webrowser.Document.HtmlDocument и пространства имен MSHTML

  5. пример его использования: 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;
        }
      }
    }
    

Подробнее смотрите по первой ссылке, это исходный код главного окна, там много разных манипуляций!

0 голосов
/ 29 марта 2011

Почему такой сложный ответ, ребята? Абатищев, мне было бы интересно заглянуть в ваш мозг, должно быть интересно ...

Просто попробуйте это:

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

Теперь вы можете изменить вторую строку на WB2 или любой другой компонент WebBrowser в любой из ваших СОБСТВЕННЫХ форм.

0 голосов
/ 05 февраля 2010

Ошибка в случае MouseBUttons.Left:

Ошибка 1 Элемент управления не может провалиться с одной метки регистра 1048576: ') к другому C: \ Documents and Settings \ ever \ My Документы \ Visual Studio 2005 \ Projects \ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs 64 17 wApp_SurverMonkey

...