원래의 대답은 here입니다,하지만 난 경우 링크에 붙여 넣기하고있어이
이의 그 당신이 형성라고하자 등 사망 :
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;
}
}
그리고 중요한 것은, 사용자 정의 창 작성자 :
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;
}
}
희망이 있습니다. 건배
길게 찍었을 수도 있지만 browser.CreateWindow2 이벤트를 시도 했습니까? 그것은 아마도 다른 이벤트 args 객체를 가지고 있습니다. 아마도 ... – Bartosz