使用geckofx在选项卡中分隔会话

时间:2016-08-31 13:13:47

标签: c# session cookies geckofx

我目前正在开发一个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();
    }
}

任何人都可以帮助我让浏览器在每个标签中设置不同的会话,但允许刷新标签页面。

0 个答案:

没有答案