2

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

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

我曾尝试在浏览器控件的构造函数/处理方法中调用NS_InitXPCOM2NS_ShutdownXPCOM,但是在进程的生命周期内不能在 NS_ShutdownXPCOM 之后调用 NS_InitXPCOM2,所以这只会崩溃。

我还使用了 nsISHistory 的 PurgeHistory 方法和nsICacheService的evictEntries方法——这些方法似乎都没有在进程的生命周期内立即产生影响。

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

该程序是用 C# 编写的,但是任何语言的答案都值得赞赏。

非常感谢

4

1 回答 1

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();在适当的位置。

于 2010-02-22T02:49:02.650 回答