// ==UserScript== // @name gmCookie // @author cxxjackie // @version 1.0.0 // ==/UserScript== function gmCookie(url) { if (!window.GM_cookie) return console.error('缺少GM_cookie,请先通过@grant引入!'); return new Promise((resolve, reject) => { GM_cookie('list', {url}, (cookie, error) => { if (error || !Array.isArray(cookie)) { reject(error); } else { function proxySet(target, prop, value) { if (prop !== 'name' && target[prop] !== value) { GM_cookie('set', {...target, url}); target[prop] = value; } } const cookieObj = {}; for (const item of cookie) { cookieObj[item.name] = new Proxy(item, {set: proxySet}); } resolve(new Proxy(cookieObj, { set: function(target, prop, value) { value.name = prop; GM_cookie('set', {...value, url}); target[prop] = new Proxy(value, {set: proxySet}); }, deleteProperty: function(target, prop) { GM_cookie('delete', { url: url, name: prop }); return delete target[prop]; } })); } }); }); }