Ed *_*ick 9 javascript webkit mobile-safari indexeddb
我正在使用优秀的 ht tps ://www.npmjs.com/package/idb包来管理 Web 应用程序上的简单 indexedDB 实现。
对于大量 iOS 用户,我向我们的错误报告系统报告了此错误“UnknownError:数据库已根据用户的请求删除”,但我在复制时遇到了问题。
到目前为止,它似乎只影响用户:
我认为错误的根源是webkit中的这一行https://github.com/WebKit/WebKit/blob/e98ff129bc8eba06ac17105f19c5f0e142aab853/Source/WebCore/Modules/indexeddb/shared/IDBError.h#L40
这似乎与服务器连接关闭有关。
实现的简化版本:
// ./store.js
import { openDB } from 'idb'
export const upgrade = (db) => {
if (!db?.createObjectStore) return null
db.createObjectStore('example_store_name_1')
}
export const set = async (storeName, val, key) => {
const dbPromise = openDB('example_db_name', 1, { upgrade })
if (!window.indexedDB) return null
return (await dbPromise).put(storeName, val, key)
}
export const count = async (storeName) => {
const dbPromise = openDB('example_db_name', 1, { upgrade })
if (!window.indexedDB) return null
return (await dbPromise).count(storeName)
}
// ./index.js
import { set, count } from './store.js'
export const storeEvent = async (storeName, value, key) => {
try {
const rowCount = await count(storeName)
// I process and clear the db in a separate part of the app, this count is just here here as a rough limit to
// ensure that I don't keep pushing data into storage if, for some reason, it is not getting cleared elsewhere
if (rowCount < 500) {
await set(storeName, value, key)
}
} catch (error) {
// error reported to error monitoring tool
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试复制的一些内容(在 Instagram webveiw、iOS 14.7.1 或 Mobile Safari 14.6 上):
对于如何复制此问题的任何建议表示赞赏,以便我可以找出如何处理它!