Web IndexedDB Helper

浏览器数据库工具类

Fra 18.08.2023. Se den seneste versjonen.

Dette scriptet burde ikke installeres direkte. Det er et bibliotek for andre script å inkludere med det nye metadirektivet // @require https://update.greatest.deepsurf.us/scripts/473362/1237029/Web%20IndexedDB%20Helper.js

  1. // ==UserScript==
  2. // @name Web IndexedDB Helper
  3. // @namespace web-indexed-database-helper
  4. // @version 1.0.0
  5. // @description 浏览器数据库工具类
  6. // @author 如梦Nya
  7. // @license MIT
  8. // ==/UserScript==
  9.  
  10. class _WebIndexedDBHelper {
  11. constructor() {
  12. /** @type {IDBDatabase} */
  13. this.db = undefined
  14. }
  15.  
  16. /**
  17. * 打开数据库
  18. * @param {string} dbName 数据库名
  19. * @param {number | undefined} dbVersion 数据库版本
  20. * @returns {Promise<WebDB, any>}
  21. */
  22. open(dbName, dbVersion) {
  23. let self = this
  24. return new Promise(function (resolve, reject) {
  25. /** @type {IDBFactory} */
  26. const indexDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB
  27. let req = indexDB.open(dbName, dbVersion)
  28. req.onerror = reject
  29. req.onsuccess = function () {
  30. self.db = this.result
  31. resolve(self)
  32. }
  33. })
  34. }
  35.  
  36. /**
  37. * 查出一条数据
  38. * @param {string} tableName 表名
  39. * @param {string} key 键名
  40. * @returns {Promise<any, any>}
  41. */
  42. get(tableName, key) {
  43. let self = this
  44. return new Promise(function (resolve, reject) {
  45. let req = self.db.transaction([tableName]).objectStore(tableName).get(key)
  46. req.onerror = reject
  47. req.onsuccess = function () {
  48. resolve(this.result)
  49. }
  50. })
  51. }
  52.  
  53. /**
  54. * 插入、更新一条数据
  55. * @param {string} tableName 表名
  56. * @param {string} key 键名
  57. * @param {any} value 数据
  58. * @returns {Promise<IDBValidKey, any>}
  59. */
  60. put(tableName, key, value) {
  61. let self = this
  62. return new Promise(function (resolve, reject) {
  63. let req = self.db.transaction([tableName], 'readwrite').objectStore(tableName).put(value, key)
  64. req.onerror = reject
  65. req.onsuccess = function () {
  66. resolve(this.result)
  67. }
  68. })
  69. }
  70.  
  71. /**
  72. * 关闭数据库
  73. */
  74. close() {
  75. this.db.close()
  76. delete this.db
  77. }
  78. }
  79.  
  80. const WebDB = {
  81. /**
  82. * 打开数据库
  83. * @param {string} dbName 数据库名
  84. * @param {number | undefined} dbVersion 数据库版本
  85. * @returns {Promise<WebDB, any>}
  86. */
  87. open: function (dbName, dbVersion) {
  88. return new _WebIndexedDBHelper().open(dbName, dbVersion)
  89. }
  90. }