【问题描述】:

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

【问题讨论】:

  • WebContents.session.cookies.get(details, callback)

标签: node.js node-webkit electron


【解答1】:

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

Windows:
C:\Users\\AppData\Roaming\\Cache

Linux:
/home//.config//Cache

OS X:
/Users//Library/Application Support//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 应用程序中的开发工具。这个答案是可能的解决方案之一。
        • 谢谢,如果您只需要快速清除缓存而不为一次性的事情编写代码,这将很有帮助。最初的问题不清楚它需要代码解决方案还是 1 次解决方案。
        【解答8】:

        在 Windows、electron v10.1.5 上尝试了来自 @thegnuu 和 session.defaultSession.clearCache(); 的答案。

        选项 1: 删除缓存路径,C:\Users\\AppData\Roaming\\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\\AppData\Roaming\\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\\AppData\Roaming\\Local Storage 目录< /p>

        【问题讨论】: