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

Posted

技术标签:

【中文标题】如何清除电子(原子壳)中的缓存数据?【英文标题】:How to clear the cache data in Electron(atom shell)? 【发布时间】:2015-10-05 11:03:16 【问题描述】:

我想清除 Electron(atom-shell) 中的缓存数据。我不 找到任何像 gui.App.clearCache()(node-webkit api 来清除缓存的 api 数据)在电子。如果您找到任何 api 或任何其他方式,请告诉我 知道。 cmets 表示赞赏。

【问题讨论】:

WebContents.session.cookies.get(details, callback) 【参考方案1】:

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

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

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

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

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

【讨论】:

在 Windows 上,您通过 const process = require('process'); process.env.APPDATA + "\\"+ app.getName() + "\\Cache"; 获得缓存路径我不确定它是否适用于其他平台。【参考方案2】:

您可以使用session.clearCache api。

var remote = require('remote'); 
var win = remote.getCurrentWindow();
win.webContents.session.clearCache(function()
//some callback.
);

【讨论】:

【参考方案3】:

如果你想清除以前登录会话的任何残余,你最好使用这个:

loginWindow.webContents.session.clearStorageData()

【讨论】:

删除他们的内容安全吗?【参考方案4】:

我们正在我们的应用程序中使用它...

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 工作正常 当然,我只是添加它来表明这个动作是异步的;)【参考方案5】:

答案:

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/

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

在开发时,在开发者工具中转到标签应用程序,并在清除存储和清除站点数据中

【讨论】:

这对电子应用有何帮助? CTRL+SHIFT+I 在 Electron 应用程序中打开开发工具。这个答案是可能的解决方案之一。 谢谢,如果您只需要快速清除缓存而无需一次性编写代码,这将很有帮助。最初的问题并不清楚它需要代码解决方案还是一次性解决方案。【参考方案8】:

在 Windows,电子 v10.1.5 上尝试来自 @thegnuu 和 session.defaultSession.clearCache(); 的答案。

选项 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 目录

【讨论】:

以上是关于如何清除电子(原子壳)中的缓存数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何清除localStorage缓存中的value值

android 清除缓存功能如何实现

如何清除 AFNetworking 中的旧缓存?

如何删除drupal中的缓存db条目?

如何清除Oracle中的所有缓存项

如何清除chrome浏览器上的缓存