是否可以在不关闭浏览器的情况下删除或使gecko / firefox会话无效?

时间:2010-02-22 00:46:49

标签: c# firefox xpcom gecko

使用gecko / firefox XPCOM界面是否可以在不关闭浏览器的情况下删除或使用户的活动会话无效?我在一个应用程序中使用Gecko嵌入式(特别是GeckoFX),多个用户可能会在应用程序的整个生命周期内使用浏览器组件。

应用程序使用各种其他功能打包Web浏览,当Web浏览器“关闭”时,应用程序仍保持打开状态。似乎就壁虎引擎而言,由于进程尚未关闭,因此活动会话仍处于活动状态。例如,如果用户要登录Gmail或Facebook,然后关闭浏览器,则在重新打开浏览器并导航回其中一个页面时,该用户将确定仍然登录。由于多个用户可以使用该应用程序如果申请没有实际退出,这就会引发隐私问题。

我已尝试在浏览器控件的构造函数/ dispose方法中调用NS_InitXPCOM2NS_ShutdownXPCOM,但是在进程的生命周期内NS_ShutdownXPCOM之后无法调用NS_InitXPCOM2,因此这只会崩溃。

我还使用了nsISHistory的PurgeHistory方法和nsICacheService的evictEntries方法 - 这些方法似乎都没有立即生效。

有谁知道任何可以实现此目的的XPCOM接口?或者,任何指向类似功能的指针,无论是通过XPCOM接口还是Firefox扩展,都会非常感激(是否有任何扩展可以让您在不重新打开浏览器的情况下清除当前的浏览会话?或者在每个指针之间提供不同的会话Firefox窗口/标签?)

该程序是用C#编写的,但是对任何语言的答案表示赞赏。

非常感谢

1 个答案:

答案 0 :(得分:4)

我终于找到了允许这样做的界面:nsICookieManager removeAll()

使用GeckoFX的相关C#接口/代码:

[Guid("AAAB6710-0F2C-11d5-A53B-0010A401EB10"),
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICookieManager
{
    void removeAll();
    void remove(string aDomain, string aName, string aPath, bool aBlocked);
}

Xpcom.GetService<nsICookieManager>("@mozilla.org/cookiemanager;1").removeAll();在适当的位置。