如何使用正确的地址和标题更改在CefSharp中实现新选项卡?

问题描述:

我使用CefSharp来创建浏览器。它正在工作,我可以通过使用新标签导航到各种网站。但是,当我点击以前的标签时,地址栏中的所有标签都显示相同的URL,并且它们都具有完全相同的标题。这里是我的代码:如何使用正确的地址和标题更改在CefSharp中实现新选项卡?

private void FormBrowser_Load(object sender, EventArgs e) 
    { 
     CefSettings settings = new CefSettings(); 
     Cef.Initialize(settings); 
     ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text); 
     browser.Parent = tabControl.SelectedTab; 
     browser.Dock = DockStyle.Fill; 
     browser.AddressChanged += Browser_AddressChanged; 
     browser.TitleChanged += Browser_TitleChanged; 
    } 

    // new tab function 
    public void addNewTab() 
    { 
     TabPage tpage = new TabPage(); 
     tpage.Text = "New Tab"; 
     tabControl.Controls.Add(tpage); 
     tabControl.SelectTab(tabControl.TabCount - 1); 
     toolStripTextBoxAddress.Text = ""; 
     ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text); 
     browser.Parent = tpage; 
     browser.Dock = DockStyle.Fill; 
     browser.AddressChanged += Browser_AddressChanged; 
     browser.TitleChanged += Browser_TitleChanged; 
    } 

    private void Browser_TitleChanged(object sender, TitleChangedEventArgs e) 
    { 
     this.Invoke(new MethodInvoker(() => 
     { 
      tabControl.SelectedTab.Text = e.Title; 
     })); 
    } 

    private void Browser_AddressChanged(object sender, AddressChangedEventArgs e) 
    { 
     this.Invoke(new MethodInvoker(() => 
     { 
      toolStripTextBoxAddress.Text = e.Address; 
     })); 
    } 

    // navigate method 
    private void toolStripTextBoxAddress_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (!string.IsNullOrEmpty(toolStripTextBoxAddress.Text)) 
      { 
       if (!toolStripTextBoxAddress.Text.Contains(".")) 
       { 
        getCurrentBrowser().Load("http://www.google.com/search?q=" + toolStripTextBoxAddress.Text); 
       } 
       else 
       { 
        getCurrentBrowser().Load(toolStripTextBoxAddress.Text); 
       } 
      } 
     } 
    } 

    // get current browser 
    private ChromiumWebBrowser getCurrentBrowser() 
    { 
     return (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0]; 
    } 

    // new tab button 
    private void toolStripButtonNewTab_Click(object sender, EventArgs e) 
    { 
     addNewTab(); 
    } 

这里是我曾尝试:

private void tabControl_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ChromiumWebBrowser currentBrowser = getCurrentBrowser(); 
     toolStripTextBoxAddress.Text = currentBrowser.Address; 
    } 

当我尝试打开一个新的标签它给我在这一行错误return (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0];

如何我解决了这个问题?提前致谢。

我用非常类似于您的方式编写了我的多选项卡cefsharp代码,并且遇到了同样的错误。

这是由默认的标签页数造成的。 (当你拖拽tabcontrol到你的表单时,默认情况下会有2个tabpages开头)。从属性面板中,我删除了这两个标签,以便浏览器启动智能零页面。只有在您开始浏览时才会添加任何标签页,方法是输入网址或点击收藏夹。

如果您没有将初始页数设置为零,那么这两个“空白”标签页就没有附加到浏览器。因此,getcurrentbrowser()函数无法在这些空白页面上找到任何浏览器并发生错误。