您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
locale storage key database
- // ==UserScript==
- // @name lskdb
- // @namespace http://tampermonkey.net/
- // @version 1.1.3
- // @license MIT
- // @description locale storage key database
- // @author smartacephale
- // @match *://*/*
- // ==/UserScript==
- /*
- raison d'etre for this insane degenerative garbage:
- if you have to store 1000+ unique keys,
- you don't have to parse whole json array to check one value
- */
- class LSKDB {
- constructor(prefix = 'lsm-', lockKey = 'lsmngr-lock') {
- this.prefix = prefix;
- this.lockKey = lockKey;
- // migration
- const old = localStorage.getItem('lsmngr');
- if (!old) return;
- const list = JSON.parse(old);
- localStorage.removeItem('lsmngr');
- list.forEach(l => {
- const i = localStorage.getItem(l);
- if (i) {
- const v = JSON.parse(i);
- v.forEach(x => this.setKey(x));
- }
- localStorage.removeItem(l);
- });
- }
- getAllKeys() {
- const res = [];
- for (const key in localStorage) {
- if (key.startsWith(this.prefix)) {
- res.push(key);
- }
- }
- return res.map(r => r.slice(this.prefix.length));
- }
- getKeys(n = 12) {
- const res = [];
- for (const key in localStorage) {
- if (res.length >= n) break;
- if (key.startsWith(this.prefix)) {
- res.push(key);
- }
- }
- res.forEach(k => localStorage.removeItem(k));
- return res.map(r => r.slice(this.prefix.length));
- }
- hasKey(key) {
- return Object.hasOwn(localStorage, `${this.prefix}${key}`);
- }
- removeKey(key) {
- localStorage.removeItem(`${this.prefix}${key}`);
- }
- setKey(key) {
- localStorage.setItem(`${this.prefix}${key}`, '');
- }
- isLocked() {
- const lock = localStorage.getItem(this.lockKey);
- const locktime = 5 * 60 * 1000;
- return !(!lock || Date.now() - lock > locktime);
- }
- lock(value) {
- if (value) {
- localStorage.setItem(this.lockKey, Date.now());
- } else {
- localStorage.removeItem(this.lockKey);
- }
- }
- }