Dot-Net

如何強制 Web 瀏覽器控制項始終在同一視窗中打開網頁?

  • December 4, 2014

我需要在我的應用程序中使用 Web 瀏覽器,因為它保留了員工的重複性任務,但是 javascript 存在問題,在點擊錨點後會在 IE 中打開一個新視窗。如何告訴 Web 瀏覽器控制項在我希望打開的位置“打開新視窗”?例如在其他網路瀏覽器控制項中?

查看:使用原始碼的 .NET System.Windows.Forms.WebBrowser 模組的概念驗證


我對這些控制項的經驗讓我看到了這個問題可以在接下來的步驟中嘗試解決:

  1. 總是取消NewWindow事件
  2. 抓住所有連結點擊
  3. 但並非所有連結都可以通過這種方式記憶體,所以我決定在文件載入完成<a>時手動解析所有標籤
  4. 總的來說,這種控制很差,是微軟故意這樣設計的。儘管Webbrowser.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;
   }
 }
}

在第一個連結中查看更多內容,這是主視窗的原始碼,那裡有很多不同的操作!

我找到了一個有效的簡單解決方案。

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

引用自:https://stackoverflow.com/questions/701746