您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
none
当前为
// ==UserScript== // @name lib:indexeddb ls // @version 1 // @description none // @license GPLv3 // @run-at document-start // @author You // @match *://*/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAHJQTFRFAAAAEIijAo2yAI60BYyuF4WaFIifAY6zBI2wB4usGIaZEYigIoiZCIyrE4igG4iYD4mjEomhFoedCoqpDIqnDomlBYyvE4efEYmiDYqlA42xBoytD4mkCYqqGYSUFYidC4qoC4upAo6yCoupDYqmCYur4zowOQAAACZ0Uk5TAO////9vr////1+/D/+/L+/Pf/////+f3///////H4////////+5G91rAAACgUlEQVR4nM2Y22KjIBCGidg1264liZqDadK03X3/V2wNKHMC7MpF/xthHD5mgERAqZhWhfYqH6K+Qf2qNNf625hCoFj9/gblMUi5q5jLkXLCKudgyiRm0FMK82cWJp1fLbV5VmvJbCIc0GCYaFqqlDJgADdBjncqAXYobm1xh72aFMflbysteFfdy2Yi1XGOm5HGBzQ1dq7TzEoxjeNTjQZb7VA3e1c7+ImgasAgQ9+xusNVNZIo5xmOMgihIS2PbCQIiHEUdTvhxCcS/kPomfFI2zHy2PkWmA6aNatIJpKFJyekyy02xh5Y3DI9T4aOT6VhIUrsNTFp1pf79Z4SIIVDegl6IJO6cHiL/GimIZDhgTu/BlYWCQzHMl0zBWT/T3KAhtxOuUB9FtBrpsz0RV4xsjHmW+UCaffcSy/5viMGer0/6HdFNMZBq/vjJL38H9Dqx4Fuy0Em12DbZy+9pGtiDijbglwAehyj11n0tRD3WUBm+lwulE/8h4BuA+iWAQQnteg2Xm63WQLTpnMnpjdge0Mgu/GRPsV4xdjQ94Lfi624fabhDkfUqIKNrM64Q837v8yL0prasepCgrtvw1sJpoqanGEX7b5mQboNW8eawXaWXTMfMGxub472hzWzHSn6Sg2G9+6TAyRruE71s+zAzjWaknoyJCQzwxrghH2k5FDT4eqWunuNxyN9QCGcxVod5oADbYnIUkDTGZEf1xDJnSFteQ3KdsT8zYDMQXcHxsevcLH1TrsABzkNPyA/L7b0jg704viMMlpQI96WsHknCt/3YH0kOEo9zcGkwrFK39ck72rmoehmKqo2RKlilzSy/nJKEV45CT38myJp456fezktHjN5aeMAAAAASUVORK5CYII= // @grant none // @namespace https://greasyfork.org/users/1184528 // ==/UserScript== ;(() => { var x = loadlib("libloader") const a = loadlib("allfuncs", "indexeddb ls") x.savelib("indexeddb ls", async function (name = location.host) { var db = await a({ storeName: name, keyPath: "id", }).indexeddb_setup() var localdb = await a(db).indexeddb_getall() function update(...args) { if (args.length === 2) { if (a(args[1]).gettype("object").val) args[1] = { ...args[1] } if (a(args[1]).gettype("array").val) args[1] = [...args[1]] a(db).indexeddb_set({ id: args[0], val: args[1], }) localdb = localdb.filter((e) => e.id !== args[0]) localdb.push({ id: args[0], val: args[1], }) return args[1] } else { var temp = localdb.find((e) => e.id === args[0]) return temp ? temp.val : undefined } } class ls {} ls.prototype.clear = async function () {} ls.prototype.all = function () {} ls.prototype.loadall = async function () {} ls.prototype.saveall = async function () {} var __ls = new Proxy(new ls(), { has(_obj, prop) { return !!localdb.find((e) => e.id === prop) }, set(_obj, prop, val) { update(prop, val) }, get(_obj, prop) { switch (prop) { case Symbol.iterator: return function* () { for (var i in localdb) { yield localdb[i] } } case Symbol.toStringTag: return "ls" case "clear": return async function () { localdb = [] await a(db).indexeddb_clearall() return [] } case "all": return localdb case "loadall": return async function () { localdb = await a(db).indexeddb_getall() } case "saveall": return async function () { localdb.forEach((item) => a(db).indexeddb_set(item)) } default: var val = update(prop) if (a(val).gettype(["object", "array"]).val) { return new Proxy(val, { //...this, get(_o, _prop) { var val = _o[_prop] if (a(val).gettype(["object", "array"]).val) return new Proxy(val, this) return val }, set(_o, _prop, _val) { _o[_prop] = _val return update(prop, val) }, deleteProperty(_obj, _prop) { var m = delete val[_prop] update(prop, val) return m }, ownKeys() { return Object.keys(val) }, getOwnPropertyDescriptor(_target, _prop) { return Reflect.getOwnPropertyDescriptor(val, _prop) }, has(_target, _prop) { return _prop in val }, }) } return val } }, deleteProperty(_obj, prop) { if (!localdb.find((e) => e.id === prop)) return false a(db).indexeddb_remove(prop) localdb = localdb.filter((e) => e.id !== prop) return true }, ownKeys() { return localdb.map((e) => e.id) }, getOwnPropertyDescriptor(_target, name) { return { value: update(name), configurable: true, enumerable: true, } }, has(_target, name) { return !!localdb.find((e) => e.id === name) }, }) return __ls }) })()