琦玉 发表于 2023-7-21 10:38:24

很厉害的,大佬,好棒,使用简单很多

王一之 发表于 2025-5-29 11:48:27

给哥哥提供一个完整示例:

```js
// ==UserScript==
// @name         gmCookie test
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/*
// @require      https://scriptcat.org/lib/721/1.0.1/gmCookie.js
// @grant      GM_cookie
// @connect      www.baidu.com
// ==/UserScript==

console.log('gmcookie start');

gmCookie('https://www.baidu.com/').then(async cookie => {
    // 读取cookie
    console.log(cookie);
    // 修改cookie
    cookie.BAIDUID.value = 'hello';
    // 新增cookie
    cookie.test = {
      path: '/',
      value: 'world'
    };
    // 删除cookie
    delete cookie.BAIDUID;
    // 由于GM_cookie是异步,调用$alldone方法可以等待所有操作完成
    await cookie.$alldone();
});
```

tfsn20 发表于 3 天前

本帖最后由 tfsn20 于 2025-6-25 12:34 编辑

@cxxjackie 你好,最近脚本猫自动更新了,导致使用你的库会发生下面错误。
!(data/attachment/forum/202506/25/123008w3hv52vh5mmezqji.png)
我的代码:
```
const tools = {
      gmCookie: async 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 {
                        const promises = [];
                        async function alldone() {
                            await Promise.all(promises);
                            promises.length = 0;
                        }
                        function proxySet(target, prop, value) {
                            if (prop !== 'name' && target !== value) {
                              promises.push(new Promise(resolve => {
                                    GM_cookie('set', { ...target, url }, resolve);
                              }));
                              target = value;
                            }
                        }
                        const cookieObj = { $alldone: alldone };
                        for (const item of cookie) {
                            cookieObj = new Proxy(item, { set: proxySet });
                        }
                        resolve(new Proxy(cookieObj, {
                            set: function (target, prop, value) {
                              value.name = prop;
                              promises.push(new Promise(resolve => {
                                    GM_cookie('set', { ...value, url }, resolve);
                              }));
                              target = new Proxy(value, { set: proxySet });
                            },
                            deleteProperty: function (target, prop) {
                              promises.push(new Promise(resolve => {
                                    GM_cookie('delete', { ...target, url }, resolve);
                              }));
                              return delete target;
                            }
                        }));
                  }
                });
            });
      },
}
```
调用函数
```
      let cookies = await tools.gmCookie('http://cgyy.zzuli.edu.cn/');
      for (let key in cookies) {
            delete cookies;
      }
```

cxxjackie 发表于 3 天前

tfsn20 发表于 2025-6-25 12:32
@cxxjackie 你好,最近脚本猫自动更新了,导致使用你的库会发生下面错误。
!

感谢反馈,这个问题是因为直接遍历会把$alldone当成cookie导致的,1.0.2已修复。
页: 1 [2]
查看完整版本: 封装了一下GM_cookie