如何清除电子(原子壳)中的缓存数据?
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
目录
【讨论】:
以上是关于如何清除电子(原子壳)中的缓存数据?的主要内容,如果未能解决你的问题,请参考以下文章