我正在开发一个电子应用程序,它使用电子 API 和 devtools 协议的组合来实现浏览器自动化。我遇到了一个问题,即使在清除缓存后,页面重新加载时仍会从内存缓存中检索 javascript 文件。使用电子 API 和使用 devtools 协议清除缓存都会发生这种情况。
Network.clearBrowserCache devtools
我的问题是在执行命令(或session.clearCache()
电子 API 调用)时是否应该清除内存缓存?如果是这样,为什么我的情况不会发生?如果没有,除了磁盘缓存,我如何清除内存缓存?
以下是一些使用电子 API 和 devtools 协议清除缓存的代码片段:
电子:
browserWindow.webContents.openDevTools();
await new Promise((resolve) => setTimeout(resolve, 5000));
await browserWindow.webContents.loadURL('https://mozenda-electron-test.s3-us-west-2.amazonaws.com/Mozenda-Electron-Test/RequestManager/RequestBlocking.html');
await new Promise((resolve) => setTimeout(resolve, 3000));
await browserWindow.webContents.session.clearCache();
await browserWindow.webContents.session.clearStorageData();
await browserWindow.webContents.reload();
await new Promise((resolve) => setTimeout(resolve, 3000));
开发工具协议:
browserWindow.webContents.openDevTools();
await new Promise((resolve) => setTimeout(resolve, 5000));
await browserWindow.webContents.loadURL('https://mozenda-electron-test.s3-us-west-2.amazonaws.com/Mozenda-Electron-Test/RequestManager/RequestBlocking.html');
await new Promise((resolve) => setTimeout(resolve, 3000));
const devtools = new DevTools();
await devtools.CommandExecute('Network.clearBrowserCache');
await browserWindow.webContents.reload();
await new Promise((resolve) => setTimeout(resolve, 3000));
...
export class DevTools
{
private _browser: BrowserWindow;
public constructor(browser: BrowserWindow)
{
this._browser = browser;
try
{
this._browser.webContents.debugger.attach('1.3');
}
catch (err)
{
LogHelper.WriteError('DevToolsCommandExecute', 'Debugger attach failed : ', err);
}
}
public async CommandExecute(method: string, params: unknown = {}, timeoutMS = 100): Promise<unknown>
{
return Promise.race([this._browser.webContents.debugger.sendCommand(method, params), new Promise((_resolve, reject) =>
{
setTimeout(() => reject('Timed out in '+ timeoutMS + 'ms.'), timeoutMS);
})]).catch((error) =>
{
LogHelper.WriteError('CommandExecuteError:', method, error);
throw error;
});
}
}
这是我在 DevTools 网络窗口中看到的结果: DevTools network info