上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12
返回列表 发新帖
楼主: cxxjackie - 

封装了一下GM_cookie

[复制链接]
  • TA的每日心情
    无聊
    2023-9-5 15:56
  • 签到天数: 54 天

    [LV.5]常住居民I

    15

    主题

    76

    回帖

    112

    积分

    中级工程师

    积分
    112
    发表于 2023-7-21 10:38:24 | 显示全部楼层
    很厉害的,大佬,好棒,使用简单很多
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    309

    主题

    4736

    回帖

    4450

    积分

    管理员

    积分
    4450

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2025-5-29 11:48:27 | 显示全部楼层

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

    // ==UserScript==
    // @name         gmCookie test
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1.0
    // @description  try 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();
    });
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 08:01
  • 签到天数: 977 天

    [LV.10]以坛为家III

    47

    主题

    206

    回帖

    1012

    积分

    荣誉开发者

    积分
    1012

    荣誉开发者油中2周年生态建设者油中3周年

    发表于 2025-6-25 12:32:16 | 显示全部楼层

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

    @cxxjackie 你好,最近脚本猫自动更新了,导致使用你的库会发生下面错误。
    5f56c86ac45bf0fec3663a4426c2bb7a.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[prop] !== value) {
                                    promises.push(new Promise(resolve => {
                                        GM_cookie('set', { ...target, url }, resolve);
                                    }));
                                    target[prop] = value;
                                }
                            }
                            const cookieObj = { $alldone: alldone };
                            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;
                                    promises.push(new Promise(resolve => {
                                        GM_cookie('set', { ...value, url }, resolve);
                                    }));
                                    target[prop] = new Proxy(value, { set: proxySet });
                                },
                                deleteProperty: function (target, prop) {
                                    promises.push(new Promise(resolve => {
                                        GM_cookie('delete', { ...target[prop], url }, resolve);
                                    }));
                                    return delete target[prop];
                                }
                            }));
                        }
                    });
                });
            },
    }

    调用函数

            let cookies = await tools.gmCookie('http://cgyy.zzuli.edu.cn/');
            for (let key in cookies) {
                delete cookies[key];
            }
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    896

    回帖

    1394

    积分

    荣誉开发者

    积分
    1394

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2025-6-25 22:51:34 | 显示全部楼层
    tfsn20 发表于 2025-6-25 12:32
    [md]@cxxjackie 你好,最近脚本猫自动更新了,导致使用你的库会发生下面错误。
    ![5f56c86ac45bf0fec3663a44 ...

    感谢反馈,这个问题是因为直接遍历会把$alldone当成cookie导致的,1.0.2已修复。
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表