Chrome开发工具中的"清除网站数据"等效于什么?

aug*_*aug 10 javascript cookies caching google-chrome browser-cache

我正在寻找一种方法来触发与Chrome Dev工具中的"清除网站数据"相同的行为,或者尽可能接近相同的行为.我知道有些事情是不可能的,即清除浏览器缓存,这不需要在这个问题的范围内.我不确定Clear Site Data是否除了清除cookie,Web SQL/IndexedDB和取消注册服务工作者之外还做了一些特殊的事情.

我在我工作的一些项目中使用localForage,因此清理IndexedDB/localStorage非常简单并确保调用,clear但我不熟悉其他部分幕后发生的事情,或者我可能会遗漏某些内容.对于上下文,在我的应用程序中有时候我会看到尴尬的回归(我做了一些更新但他们没有更新).我有一个清除localStorage和cookies的编程触发器,但它不能解决问题,但点击"清除站点数据"并检查所有内容.

另外注意我还发现了关于清晰网站数据头的W3C规范草案?我不确定这是否是我们可能采取的方向,以触发明确的网站数据?任何信息都将非常受欢迎.

aug*_*aug 8

哎呀,所以在没有得到任何答案后,决定深入研究一些源代码。我找到了Chrome Devtools的存储库以及他们实际this._clear从 UI调用的代码(可以在资源/ClearStorageView.js 中找到)

  _clear() {
    if (!this._securityOrigin)
      return;
    const storageTypes = [];
    for (const type of this._settings.keys()) {
      if (this._settings.get(type).get())
        storageTypes.push(type);
    }

    this._target.storageAgent().clearDataForOrigin(this._securityOrigin, storageTypes.join(','));

    const set = new Set(storageTypes);
    const hasAll = set.has(Protocol.Storage.StorageType.All);
    if (set.has(Protocol.Storage.StorageType.Cookies) || hasAll) {
      const cookieModel = this._target.model(SDK.CookieModel);
      if (cookieModel)
        cookieModel.clear();
    }

    if (set.has(Protocol.Storage.StorageType.Indexeddb) || hasAll) {
      for (const target of SDK.targetManager.targets()) {
        const indexedDBModel = target.model(Resources.IndexedDBModel);
        if (indexedDBModel)
          indexedDBModel.clearForOrigin(this._securityOrigin);
      }
    }

    if (set.has(Protocol.Storage.StorageType.Local_storage) || hasAll) {
      const storageModel = this._target.model(Resources.DOMStorageModel);
      if (storageModel)
        storageModel.clearForOrigin(this._securityOrigin);
    }

    if (set.has(Protocol.Storage.StorageType.Websql) || hasAll) {
      const databaseModel = this._target.model(Resources.DatabaseModel);
      if (databaseModel) {
        databaseModel.disable();
        databaseModel.enable();
      }
    }

    if (set.has(Protocol.Storage.StorageType.Cache_storage) || hasAll) {
      const target = SDK.targetManager.mainTarget();
      const model = target && target.model(SDK.ServiceWorkerCacheModel);
      if (model)
        model.clearForOrigin(this._securityOrigin);
    }

    if (set.has(Protocol.Storage.StorageType.Appcache) || hasAll) {
      const appcacheModel = this._target.model(Resources.ApplicationCacheModel);
      if (appcacheModel)
        appcacheModel.reset();
    }

    this._clearButton.disabled = true;
    const label = this._clearButton.textContent;
    this._clearButton.textContent = Common.UIString('Clearing...');
    setTimeout(() => {
      this._clearButton.disabled = false;
      this._clearButton.textContent = label;
    }, 500);
  }
Run Code Online (Sandbox Code Playgroud)

我认为 tl; dr 自然是他们的 Clear Site 数据挂钩到他们在表单上的复选框选项中,该选项通过并清除选项。在我最初的问题中,我个人想知道是否还有更多的东西,而且看起来他们确实在最高层跟注,无论您检查了什么:

this._target.storageAgent().clearDataForOrigin(this._securityOrigin, storageTypes.join(','));
Run Code Online (Sandbox Code Playgroud)

不知道这是什么,但做了一些挖掘,看起来它可能是一些实验性的 API,用于清除 Lighthouse 应用程序的原始数据。就我个人而言,我不确定或觉得有资格说这是正确的。希望这可以帮助人们。

如果我可以制作一个与 JavaScript 等效的脚本,我会尝试,但从技术上讲,所有 Chrome Devtools 都在 JavaScript 中:P

  • 这似乎并没有提供问题的答案。我错了吗? (3认同)