1

我正在开发一个电子应用程序,它使用电子 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

4

0 回答 0