在隐身模式下使用chrome.browsingData.remove()函数

5

我有一个扩展程序,可以使用以下代码在我的后台页中删除使用 Google Chrome 下载的文件:

chrome.browsingData.remove({ "since": 0 }, { "downloads": true });

当一个下载在普通窗口中时,它可以正常工作,但是当一个下载在Chrome隐身窗口中完成时,它没有被删除。我的扩展在隐身模式下被激活,后台页面能够检测到隐身页面中的下载是否已经完成,使用以下方式:

chrome.downloads.onChanged.addListener(function(download) {
    if (download.state && download.state.current == "complete") {
        // The code here is fired even if the download has been completed in incognito mode
    }
}

有没有一种方法可以从后台页面中删除隐身窗口的浏览数据?

1
这可能与您的扩展程序是否使用spanningsplit隐身模式有关。我想,如果您正在使用spanning模式,则在隐身模式下接收到的下载会触发事件,但是清除下载的调用会在主Chrome配置文件中触发-毕竟它们是分开的API。如果您还没有尝试过,请尝试使用split模式! - Jim O'Brien
也可以尝试使用chrome.downloads.erase。只依赖于一个API意味着当某些内容被弃用时需要更改的内容更少! - Jim O'Brien
@JimO'Brien 您可以将您的第一条评论转换为答案,这是解决此问题的完美解决方案和解释! - Armand Grillet
考虑完成 - 非常感谢您的点赞/采纳! - Jim O'Brien
1个回答

4
你面临的问题是你的扩展正在跨越隐身模式下运行。这意味着扩展在单个进程下运行,附加到安装扩展的配置文件下(即非隐身窗口)。在这种情况下,chrome.downloads API会触发隐身和普通配置文件中下载的onChanged事件,但chrome.browsingData API仅适用于普通配置文件。
相反,你需要使用分离式隐身模式。这意味着扩展在每个使用它的配置文件中单独运行(即隐身窗口获得自己运行的扩展副本)。这意味着当你调用chrome.browsingData API时,它适用于触发事件的窗口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接