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规范草案?我不确定这是否是我们可能采取的方向,以触发明确的网站数据?任何信息都将非常受欢迎.
哎呀,所以在没有得到任何答案后,决定深入研究一些源代码。我找到了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
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |