la réponse originale est here, mais je le coller dans le lien de cas meurt etc.
Disons que c'est vous formez:
public partial class MainForm: Form
{
public MainForm()
{
InitializeComponent();
WindowWatcher.WindowCreator = new TabbedBrowserCreator(this);
WindowWatcher.LockWindowCreator();
gwBrowser.DocumentTitleChanged += gwBrowser_DocumentTitleChanged;
gwBrowser.DocumentCompleted += gwBrowser_DocumentCompleted;
gwBrowser.Navigate("http://www.popuptest.com/");
}
void gwBrowser_DocumentTitleChanged(object sender, EventArgs e)
{
tabPageMain.Text = gwBrowser.DocumentTitle;
}
void gwBrowser_DocumentCompleted(object sender, EventArgs e)
{
// Some work on document completed
}
internal nsIWebBrowserChrome AddNewTab()
{
GeckoWebBrowser gwBrowserTab = new GeckoWebBrowser();
gwBrowserTab.DocumentTitleChanged += gwBrowserTab_DocumentTitleChanged;
gwBrowserTab.DocumentCompleted += gwBrowserTab_DocumentCompleted;
TabPage oTabPage = new TabPage("New Tab");
Padding oPadding = oTabPage.Margin; oPadding.All = 0;
oPadding = oTabPage.Padding; oPadding.All = 0;
oTabPage.Controls.Add(gwBrowserTab);
gwBrowserTab.Dock = DockStyle.Fill;
tabControlMain.TabPages.Add(oTabPage);
return gwBrowserTab;
}
private void gwBrowserTab_DocumentTitleChanged(object sender, EventArgs e)
{
GeckoWebBrowser gwBrowserTab = sender as GeckoWebBrowser;
if (gwBrowserTab == null) return;
TabPage oTabPage = gwBrowserTab.Parent as TabPage;
if (oTabPage == null) return;
oTabPage.Text = gwBrowserTab.DocumentTitle;
}
private void gwBrowserTab_DocumentCompleted(object sender, EventArgs e)
{
GeckoWebBrowser gwBrowserTab = sender as GeckoWebBrowser;
if (gwBrowserTab == null) return;
TabPage oTabPage = gwBrowserTab.Parent as TabPage;
if (oTabPage == null) return;
tabControlMain.SelectedTab = oTabPage;
}
}
Et l'élément clé, des fenêtres personnalisées créateur:
public sealed class TabbedBrowserCreator: nsIWindowCreator2
{
private MainForm m_Parent;
public TabbedBrowserCreator(MainForm p_Parent)
{
m_Parent = p_Parent;
}
nsIWebBrowserChrome nsIWindowCreator2.CreateChromeWindow(nsIWebBrowserChrome parent, uint chromeFlags)
{
bool bCancel = false;
return CreateWindow(parent, chromeFlags, 0, null, ref bCancel);
}
nsIWebBrowserChrome nsIWindowCreator2.CreateChromeWindow2(nsIWebBrowserChrome parent, uint chromeFlags, uint contextFlags, nsIURI uri, ref bool cancel)
{
return CreateWindow(parent, chromeFlags, contextFlags, uri, ref cancel);
}
nsIWebBrowserChrome nsIWindowCreator.CreateChromeWindow(nsIWebBrowserChrome parent, uint chromeFlags)
{
bool cancel = false;
return CreateWindow(parent, chromeFlags, 0, null, ref cancel);
}
private nsIWebBrowserChrome CreateWindow(nsIWebBrowserChrome parent, uint chromeFlags, uint contextFlags, nsIURI uri, ref bool cancel)
{
GeckoWindowFlags flags = (GeckoWindowFlags)chromeFlags;
if ((flags & GeckoWindowFlags.OpenAsChrome) != 0)
{
// create the child window
nsIXULWindow xulChild = AppShellService.CreateTopLevelWindow(null, null, chromeFlags, -1, -1);
// this little gem allows the GeckoWebBrowser to be properly activated when it gains the focus again
if (parent is GeckoWebBrowser && (flags & GeckoWindowFlags.OpenAsDialog) != 0)
{
EventHandler gotFocus = null;
gotFocus = delegate(object sender, EventArgs e)
{
var br = (sender as GeckoWebBrowser);
if (br != null)
{
br.GotFocus -= gotFocus;
br.WebBrowserFocus.Activate();
}
};
var parBr = parent as GeckoWebBrowser;
parBr.GotFocus += gotFocus;
}
// return the chrome
return Xpcom.QueryInterface<nsIWebBrowserChrome>(xulChild);
}
nsIWebBrowserChrome oBrowser = m_Parent.AddNewTab();
oBrowser.SetChromeFlagsAttribute(chromeFlags);
return oBrowser;
}
}
Espérons que cela aide. Cheers
Cela peut être long, mais avez-vous essayé l'événement browser.CreateWindow2? Il a un objet différent args d'objet donc peut-être ... – Bartosz