我使用 indexedDB 来检查用户是否处于隐私浏览模式。InvalidStateError 出现在 window.onerror 上并通过跟踪系统记录。看起来打开发生在不同的线程中。我只找到了这个原始解决方案:设置全局处理程序 window.onerror,以隐藏此错误。
// Get old handler (maybe undefined)
const oldHandler = window.onerror;
// Empty handler
const noop = () => 1;
window.onerror = noop;
const returnOldHandler = () => setTimeout(() => {
// The ugly thing: we some external code could place own onerror handler
// between our code evaluation.
// For this case we should check is it changed.
if (window.onerror === noop) {
window.onerror = oldHandler;
}
}, 0);
try {
db = window.indexedDB.open('test');
// Return global handler when DB opens.
// It can create some errors due async process.
db.onerror = returnOldHandler;
db.onsuccess = returnOldHandler;
} catch(e) {
// never evaluate
}