Chrome Dev Tools 中 JavaScript 相当于 "Clear Site Data" 的 JavaScript 等效物是什么?



我正在寻找一种触发与Chrome Dev工具中与"清除站点数据"相同的行为或尽可能接近相同行为的方法。我知道有些事情是不可能的,即清除浏览器缓存,这不必在这个问题的范围内。我不确定清晰的站点数据是否会做一些特殊的事情,除了清除cookie,web sql/indexedDB和未注册的服务工作者。

我在我从事的某些项目中使用localforage,因此清洁索引索引/localstorage非常简单,并确保致电clear,但是我不熟悉其他部分的幕后发生的事情,或者如果我可能缺少某些东西。对于上下文,我的应用程序中有些时候看到了尴尬的回归(我进行了一些更新,但它们不会更新)。我有一个编程触发器可以清除localstorage和cookie,但没有解决情况,但使用所检查的所有内容单击"清除站点数据"。

另外,我还发现了有关清晰站点数据标头的W3C规格草稿?我不确定这是否是我们可能会触发站点数据清晰的方向?任何信息都将不胜感激。

yikes,因此在没有得到任何答案后,决定挖掘某些源代码。我找到了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自然是他们清晰的站点数据钩中的复选框选项,它们在表单上浏览并清除选项。在我最初的问题中,我个人想知道是否有更多的东西,而且看起来确实像他们在最高的地方打电话,无论您检查过什么:

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

不确定这是什么,但是进行了一些挖掘,看来它可能是一些实验性的API,可以清除灯塔应用程序中的数据。就我个人而言,我不确定或有资格说这是正确的。希望这对人们有所帮助。

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

最新更新