[英]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.