rga*_*eth 5 javascript firefox incognito-mode
我正在集成一个使用 IndexedDB 的 javascript 库,但是当 Firefox 处于隐私浏览/窗口模式时,它“不礼貌地”失败了。该库返回 500 内部错误,同时 Firefox 向控制台吐出 InvalidStateError。
我想做的是在实例化这个库之前添加一个检查,如果 IndexedDB 不可用,则根本不使用该库。即某种类型的 try/catch 测试。从我所看到的,即使违规代码在 try/catch 中,Firefox 似乎也会吐出控制台错误(但也许还有办法......)。
我实际上并不关心用户是否在私人窗口会话中,但这似乎是 Firefox 导致此 InvalidStateError 的唯一一次。
我使用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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |