繁体   English   中英

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

[英]What is the JavaScript equivalent of “Clear Site Data” in Chrome Dev Tools?

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

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

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

在没有得到任何答案之后就这样了,决定深入研究一些源代码。 我找到了Chrome Devtools的存储库以及他们实际从UI调用this._clear的代码(可以在resources / 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);
  }

我认为tl; dr自然是他们的Clear Site数据挂钩到他们在表单上的复选框选项,它通过并清除选项。 在我原来的问题中,我个人想知道是否有更多的东西而不仅仅是那样,看起来他们确实在最顶层打电话,无论你检查了什么:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM