**编辑:**虽然我仍然不理解会话和webFrame缓存之间的区别,但可以简单地从预加载脚本中调用webFrame.clearCache()
。
问题
我有一个电子应用程序,它涉及到重命名和重新排序本地文件系统上的图像。这通常会导致文件交换他们的文件名,这导致缓存问题,直到窗口重新加载才能解决。我无法清除或禁用该高速缓存。
有效的方法(不满意)
- 从渲染器进程中调用
require("electron").webFrame.clearCache();
。这不是一个令人满意的解决方案,因为它需要启用nodeIntegration
。(主进程可用的WebFrameMain
类没有clearCache
方法)。 - 从Chrome DevTools中检查“禁用缓存”。显然这不是生产的解决方案。
不起作用的方法 - 清除会话缓存。我注意到会话缓存大小始终为0。
mainWindow.webContents.session.clearCache();
- 正在清除会话存储数据。
mainWindow.webContents.session.clearStorageData();
- 将以下命令行开关添加到主进程。
app.commandLine.appendSwitch("disk-cache-size", "0");
app.commandLine.appendSwitch("disable-http-cache");
- 创建窗口时提供禁用缓存的会话对象。
webPreferences: {
preload: path.join(__dirname, "preload.js"),
session: session.fromPartition("example", { cache: false })
}
缓存系统中显然有我不理解的组件。看起来会话缓存和webFrame缓存必须是两个不同的东西,我找不到从主进程或没有nodeIntegration
访问后者的方法。
显示此问题的最小项目可在此处找到:https://github.com/jacob-c-bickel/electron-clear-cache-test。单击该按钮将交换两个图像的文件名,但在重新加载窗口之前不会发生任何可见的更改。
我使用的是电子13.1.4和Windows 10 2004。
2条答案
按热度按时间nbnkbykc1#
您可以使用
require("electron").webFrame.clearCache();
创建一个clearCache函数,并将其附加到preLoad脚本中的windows对象,然后在独立渲染器中使用该函数。Google“电子预加载”
iezvtpos2#
是的--
webFrame
是要 * 在浏览器内部 * 使用的,所以这通常意味着preload.js
。然后,您可以使用Electron's Inter-Process Communication(IPC)技术在window
对象上全局公开该方法,允许在应用的其他地方使用!这就像你在应用程序的每一个级别上开辟一条通往正确功能的道路。
总的来说,看起来像这样:
preload.js
:然后在渲染过程中的任何地方: