2011-05-10 204 views
1

我的应用程序使用默认的Web浏览器加载数据时打开了浏览器。C#Web浏览器导航

//Set the function and display the browsers we're using (per screen) 
browsers[index].Width = screens[index].Bounds.Width; 
browsers[index].Height = screens[index].Bounds.Height; 
browsers[index].Location = new System.Drawing.Point(screens[index].Bounds.X, screens[index].Bounds.Y); 

browsers[index].Navigate(new Uri(lines[index])); 
browsers[index].Show(); 

现在我的问题是,当你点击页面上的链接,它会离开我的应用程序,并完全打开一个新的浏览器。任何方式摆脱这个?

行包含一个URL数组,浏览器是一个网页的数组,加载到不同的屏幕上。

回答

3

如果我没有错,这是因为'TARGET =“_blank”',我会尝试从内容呈现之前从标记中删除这个。

private void Browser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
{ 
    var webBrowser = (WebBrowser)sender; 
    if (webBrowser.Document != null) 
    { 
     foreach (HtmlElement tag in webBrowser.Document.All) 
     { 
      if (tag.Id == null) 
      { 
       tag.Id = String.Empty; 
       switch (tag.TagName.ToUpper()) 
       { 
        case "A": 
        { 
         tag.MouseUp += new HtmlElementEventHandler(link_MouseUp); 
         break; 
        } 
       } 
      } 
     } 
    } 
} 


private void link_MouseUp(object sender, HtmlElementEventArgs e) 
{ 
    var 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) 
      { 
       AddTab(a.href); 
      } 
      else 
      { 
       CurrentBrowser.TryNavigate(a.href); 
      } 
      break; 
     } 
     case MouseButtons.Right: 
     { 
      CurrentBrowser.ContextMenuStrip = null; 
      var contextTag = new ContextTag(); 
      contextTag.Element = a; 
      contextHtmlLink.Tag = contextTag; 
      contextHtmlLink.Show(Cursor.Position); 
      break; 
     } 
    } 
} 

出处:http://stackoverflow.com/questions/5312275/open-new-web-page-in-new-tab-in-webbrowser-control

+0

你是正确的,我是从C#角度思考问题,因为我是新来的,我不认为它会像那样处理它,显然它已经,但是这是问题。 _blank目标。 – 2011-05-10 12:09:56

+0

@Richard Dickinson,你能把这个标记为答案,以便其他社区成员可以专注于其他问题,我也会赢得一些声誉:)谢谢 – RaM 2011-05-10 12:13:52

+0

是的,每个主题都有5分钟的上限,所以它不能完成,直到过去。 – 2011-05-10 12:16:50