如何清除 Electron(原子壳)中的缓存数据?

56

我想在Electron(atom-shell)中清除缓存数据。我没有找到类似gui.App.clearCache()(用于清除缓存数据的node-webkit API)的任何API。如果您找到了任何API或其他方法,请告诉我。评论是受欢迎的。


WebContents.session.cookies.get(details, callback)WebContents.session.cookies.get(details, callback) - neel
8个回答

100

Electron将其缓存存储在以下文件夹中:

Windows:
C:\Users\<user>\AppData\Roaming\<yourAppName>\Cache

Linux:
/home/<user>/.config/<yourAppName>/Cache

OS X:
/Users/<user>/Library/Application Support/<yourAppName>/Cache

因此,删除这些文件夹也可以帮助您。 当然,这只是一次性解决方案;-)


2
在Windows上,您可以通过const process = require('process'); process.env.APPDATA + "\\"+ app.getName() + "\\Cache";获取缓存路径。我不确定它是否适用于其他平台。 - Nuryagdy Mustapayev

39
你可以使用 session.clearCache API。
var remote = require('remote'); 
var win = remote.getCurrentWindow();
win.webContents.session.clearCache(function(){
//some callback.
});

15

如果您想清除先前登录会话的任何残留,最好使用以下方法:

loginWindow.webContents.session.clearStorageData()

删除他们的内容是否安全? - Julio Guerra

9
我们在我们的应用程序中使用这个...
const { app, session } = require('electron');

// ...

session.defaultSession.clearStorageData(null, (error: any) => {
  // in our case we need to restart the application
  // app.relaunch();
  // app.exit();
});

Electron 7 更新:

await session.defaultSession.clearStorageData();

没有使用 await 也能正常工作。 - openwonk
1
当然,我只是添加了它以指示此操作是异步的 ;) - thegnuu

2

我在Windows系统上尝试了@thegnuu提供的答案和session.defaultSession.clearCache();,使用的是electron v10.1.5。

选项1: 直接删除缓存路径C:\Users\<username>\AppData\Roaming\<appname>\Cache

_deleteFolder(dirPath) {
        const fs = require('fs');

        // delete directory recursively
        try {
            fs.rmdirSync(dirPath, {recursive: true});
            this._logger.info(`cache clean: ${dirPath} is deleted!`);
        } catch (e) {
            this._logger.error(`cache clean: could not delete  ${dirPath}!`, e);
        }
    }

选项2:也清除相同的C:\Users\<username>\AppData\Roaming\<appname>\Cache目录。

const {session}   = require('electron');
session.defaultSession.clearCache();

选项1的问题:

  • 该方法有时会导致应用程序突然崩溃(在这种情况下,catch块没有运行)。
  • 此外,在应用程序重新启动后,应用程序无法加载http资产。通常在缓存文件夹清除后,当我启动应用程序时,我可以看到创建了新的缓存文件。然而,在选项1上,即使第二次重新启动后,应用程序仍然无法加载资产。手动删除缓存目录,然后应用程序正常工作。
  • 虽然我从this._logger.info(`cache clean: ${dirPath} is deleted!`);获取了日志,但缓存目录并未被删除。它里面还有5个文件。
  • 尝试使用异步的fs.rmdir,得到了相同的结果。

在选项2上,我没有遇到任何问题。我想这是最好的选择。

奖励内容:session.defaultSession.clearStorageData();会清除C:\Users\<username>\AppData\Roaming\<app name>\Local Storage目录


1

答案:

var remote = require('remote');
var win = remote.getCurrentWindow();

win.WebContents.session.cookies.get(details, callback) // getting cookies
win.WebContents.session.cookies.remove(details, callback) //deleting cookies

更多信息请参考:http://electron.atom.io/docs/v0.29.0/api/browser-window/

该链接提供了有关Electron中BrowserWindow API的详细信息。

这似乎是关于Cookie而不是缓存的问题? - undefined

0

在开发过程中,进入开发者工具,转到应用程序选项卡,然后清除存储和站点数据。


1
这对 Electron 应用程序有什么帮助? - Derek Pollard
CTRL+SHIFT+I在Electron应用程序中打开开发工具。这个答案是可能的解决方案之一。 - Neoraptor
谢谢,如果您只需要快速清除缓存而无需编写代码进行一次性操作,则此信息很有帮助。原始问题并不清楚它需要一个代码解决方案还是一次性解决方案。 - Trevor

0
你可以尝试使用 mainWindow.webContents.clearHistory(); 或者删除应用程序缓存文件夹中的内容(在应用程序运行时会重新创建)。你可以使用 app.getPath('userData') + '/Cache' 获取路径。

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