我目前正在开发一个Windows Forms应用程序,其功能类似于浏览器。我在添加浏览器标签等方面有标准功能。 我需要实现的主要目标是我在标签之间有不同的会话。 对于浏览器框架,我使用geckofx 45和xulrunner。 我还指定了nsICookieManager2以获得更多使用cookie的选项。
这是我将代码添加到选项卡和tabcontrol的代码:
private void btn_Tab_Add_Click(object sender, EventArgs e)
{
browser = new GeckoWebBrowser();
browser.Navigate(txtbx_Url.Text);
browser.Dock = DockStyle.Fill;
browser.Visible = true;
tabControl1.Anchor = AnchorStyles.Top & AnchorStyles.Bottom & AnchorStyles.Right & AnchorStyles.Left;
tabControl1.TabPages.Add("newTab"+ (i));
tabControl1.SelectTab(i);
tabControl1.SelectedTab.Controls.Add(browser);
i += 1;
nsICookieManager2的问题在于它忽略了来自网站的会话cookie。虽然这基本上是我想要的功能,但这不允许重新加载/刷新浏览器选项卡。
这就是cookiemanger2:
public class CookieServiceFactory : GenericOneClassNsFactory<CookieServiceFactory, CookieService>
{
public const string ContractID = "@mozilla.org/cookieService;1";
}
public class CookieService : nsICookieManager2
{
private static nsICookieManager2 _cookieService;
static CookieService()
{
_cookieService = Xpcom.GetService<nsICookieManager2>(Contracts.CookieManager);
}
nsISimpleEnumerator nsICookieManager2.GetEnumeratorAttribute()
{
return _cookieService.GetEnumeratorAttribute();
}
public void Remove(nsAUTF8StringBase aHost, nsACStringBase aName, nsAUTF8StringBase aPath, bool aBlocked)
{
_cookieService.Remove(aHost, aName, aPath, aBlocked);
}
public void Add(nsAUTF8StringBase aHost, nsAUTF8StringBase aPath, nsACStringBase aName, nsACStringBase aValue, bool aIsSecure, bool aIsHttpOnly, bool aIsSession, long aExpiry)
{
_cookieService.Add(aHost, aPath, aName, aValue, aIsSecure, aIsHttpOnly, aIsSession, aExpiry);
}
public bool CookieExists(nsICookie2 aCookie)
{
return _cookieService.CookieExists(aCookie);
}
public uint CountCookiesFromHost(nsAUTF8StringBase aHost)
{
return _cookieService.CountCookiesFromHost(aHost);
}
public nsISimpleEnumerator GetCookiesFromHost(nsAUTF8StringBase aHost)
{
return _cookieService.GetCookiesFromHost(aHost);
}
public void ImportCookies(nsIFile aCookieFile)
{
_cookieService.ImportCookies(aCookieFile);
}
public nsISimpleEnumerator GetCookiesForApp(uint appId, bool onlyBrowserElement)
{
return _cookieService.GetCookiesForApp(appId, onlyBrowserElement);
}
public void RemoveCookiesForApp(uint appId, bool onlyBrowserElement)
{
_cookieService.RemoveCookiesForApp(appId, onlyBrowserElement);
}
nsISimpleEnumerator nsICookieManager.GetEnumeratorAttribute()
{
return _cookieService.GetEnumeratorAttribute();
}
public void RemoveAll()
{
throw new NotImplementedException();
}
}
任何人都可以帮助我让浏览器在每个标签中设置不同的会话,但允许刷新标签页面。