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

封装了一下GM_cookie

[复制链接]
  • TA的每日心情
    慵懒
    2025-10-15 16:32
  • 签到天数: 66 天

    [LV.6]常住居民II

    16

    主题

    83

    回帖

    124

    积分

    中级工程师

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2025-7-22 00:22
  • 签到天数: 221 天

    [LV.7]常住居民III

    311

    主题

    5053

    回帖

    4673

    积分

    管理员

    积分
    4673

    管理员荣誉开发者油中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的每日心情
    慵懒
    2025-11-4 18:29
  • 签到天数: 1055 天

    [LV.10]以坛为家III

    47

    主题

    206

    回帖

    1068

    积分

    荣誉开发者

    积分
    1068

    荣誉开发者油中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

    主题

    902

    回帖

    1399

    积分

    荣誉开发者

    积分
    1399

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

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

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

    使用道具 举报

  • TA的每日心情
    无聊
    2024-8-24 22:31
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    1

    主题

    4

    回帖

    11

    积分

    助理工程师

    积分
    11
    发表于 2025-11-10 23:57:43 | 显示全部楼层
    本帖最后由 s11s 于 2025-11-10 23:59 编辑

    各位油友, 请问下面的代码 ,为什么 gmCookie中 log cookie的代码没有执行,但是也没有报错,我哪里下写错了吗?

    1. <div style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 254); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 19px; white-space: pre;">
    2. <div><span style="color: #008000;">// ==UserScript==</span>
    3. <span style="color: #008000;">// [url=home.php?mod=space&uid=23356]@name[/url]         Bilibili Cookie 自动上报插件</span>
    4. <span style="color: #008000;">// @namespace    http://tampermonkey.net/</span>
    5. <span style="color: #008000;">// @version      1.0</span>
    6. <span style="color: #008000;">// @description  检测登录后自动将 Bilibili Cookie 发送到本地 FastAPI 接口</span>
    7. <span style="color: #008000;">// [url=home.php?mod=space&uid=117334]@author[/url]       YourName</span>
    8. <span style="color: #008000;">// @grant        GM_cookie</span>
    9. <span style="color: #008000;">// @require      https://scriptcat.org/lib/721/1.0.2/gmCookie.js</span>
    10. <span style="color: #008000;">// [url=home.php?mod=space&uid=52134]@match[/url]        https://www.bilibili.com/*</span>
    11. <span style="color: #008000;">// @match        https://space.bilibili.com/*</span>
    12. <span style="color: #008000;">// @grant        GM_xmlhttpRequest</span>
    13. <span style="color: #008000;">// @connect      192.168.0.101</span>
    14. <span style="color: #008000;">// ==/UserScript==</span>



    15. (<span style="color: #0000ff;">function</span> () {
    16.     <span style="color: #a31515;">'use strict'</span>;

    17.     gmCookie(<span style="color: #a31515;">'https://www.bilibili.com/'</span>).then(<span style="color: #0000ff;">async</span> cookie => {
    18.         <span style="color: #008000;">// 读取cookie</span>
    19.         console.log(cookie);
    20.     });</div>
    21. </div>
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-8-24 22:31
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    1

    主题

    4

    回帖

    11

    积分

    助理工程师

    积分
    11
    发表于 2025-11-11 10:28:32 | 显示全部楼层

    本帖最后由 s11s 于 2025-11-11 10:32 编辑

    本帖最后由 s11s 于 2025-11-11 10:31 编辑

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

    
    [/quote]
    王老师,这个示例,运行会报错了,控制台日志如下:
    gmcookie start
    gmCookie test.user.js:19  Uncaught (in promise) ReferenceError: gmCookie is not defined
        at Window.<anonymous> (gmCookie test.user.js:19:1)
        at window.-mhty8p7n.blr257db (gmCookie test.user.js:35:8)
        at Y.exec (417cdef9-d665-4668-a6aa-79d0e4545277:2:32576)
        at Object.execScript (417cdef9-d665-4668-a6aa-79d0e4545277:2:41298)
        at set (417cdef9-d665-4668-a6aa-79d0e4545277:2:39963)
        at gmCookie test.user.js:
    ```![wechat_2025-11-11_103042_725.png](data/attachment/forum/202511/11/103235dplq0h5uuqkjnd7l.png)
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2025-7-22 00:22
  • 签到天数: 221 天

    [LV.7]常住居民III

    311

    主题

    5053

    回帖

    4673

    积分

    管理员

    积分
    4673

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

    发表于 2025-11-11 11:53:19 | 显示全部楼层
    s11s 发表于 2025-11-11 10:28
    [md]> 本帖最后由 s11s 于 2025-11-11 10:31 编辑

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

    打开再关闭一下脚本呢?看起来是@require资源没加载成功,可能和这段时间被攻击,我开启了waf有关
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

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