cxxjackie 发表于 2022-11-22 23:38:44

封装了一下GM_cookie

本帖最后由 cxxjackie 于 2022-11-23 22:48 编辑

#### 请在脚本猫上使用,其他脚本管理器可能不支持此API,或表现不一致。使用前请确保脚本已引入GM\_cookie和@connect相关域名。

因为有人说看不懂GM\_cookie的文档,而且这个API用起来也挺麻烦的,故简单封装了一下。使用示例:

```js
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();
});
```

## 更新日志

1.0.0 初始版本
1.0.1 新增$alldone方法。

王一之 发表于 2022-11-23 09:30:46

确实更简单了

tampermonkey好像有的版本支持这个,有的不支持,文档明面上是说不支持的

cxxjackie 发表于 2022-11-23 20:54:01

王一之 发表于 2022-11-23 09:30
确实更简单了

tampermonkey好像有的版本支持这个,有的不支持,文档明面上是说不支持的 ...

要不干脆放弃兼容油猴,或者提出一个新的CAT_cookie,简化一下语法。油猴对这个API基本是一个搁置的态度,脚本猫的后台脚本则是硬性需求,我觉得没必要跟随油猴的做法。
另外脚本猫的GM_cookie有点问题,删除的时候必须传url,不能只传domain,导致我这个库只能用url做参数,其实我更倾向于domain的。

王一之 发表于 2022-11-23 22:04:15

cxxjackie 发表于 2022-11-23 20:54
要不干脆放弃兼容油猴,或者提出一个新的CAT_cookie,简化一下语法。油猴对这个API基本是一个搁置的态度 ...

我也想出一系列不兼容的API,然后同步API也整上

删除这个问题我后面看看

cxxjackie 发表于 2022-11-23 22:23:33

王一之 发表于 2022-11-23 22:04
我也想出一系列不兼容的API,然后同步API也整上

删除这个问题我后面看看 ...

是的,GM_cookie是异步也挺蛋疼的,我这个库改成同步操作在一些情况下也有问题,比如需要修改完cookie后再发请求,感觉得加一个类似Promise.all的方法进来。

skycloud 发表于 2022-11-26 13:54:01

用上了,点个赞

Major 发表于 2023-5-25 21:59:18

    //
    getcookie:function(){
      gmCookie('https://www.taobao.com/').then(async cookie => {
            console.log('打印cookie',cookie)
            console.log('mycookie我的',await cookie.$alldone())
            return await cookie.$alldone();
            
      })
    },
};
打印的 await cookie.$alldone() 的值为 undefined有办法解决吗

cxxjackie 发表于 2023-5-25 22:22:52

Major 发表于 2023-5-25 21:59
打印的 await cookie.$alldone() 的值为 undefined有办法解决吗

这个$alldone本来就没有返回值啊,是用来等待其他增删操作完成的,你要看cookie的话应该打印cookie对象,由于是个Proxy,展开后在 [] 里可以看到cookie内容。

Major 发表于 2023-5-25 22:48:16

cxxjackie 发表于 2023-5-25 22:22
这个$alldone本来就没有返回值啊,是用来等待其他增删操作完成的,你要看cookie的话应该打印cookie对象, ...

可以封装一个同步的获取cookie的库吗

cxxjackie 发表于 2023-5-25 23:46:47

Major 发表于 2023-5-25 22:48
可以封装一个同步的获取cookie的库吗

没办法,GM_cookie本身是异步的,我已经尽量改成同步写法了,用async/await写起来会好一点:
(async function() {
    const cookie = awaitgmCookie('https://www.example.com/');
    // ...
    // 执行完所有操作后,调用$alldone
    await cookie.$alldone();
    // 然后写发送请求之类的代码
})();
页: [1] 2
查看完整版本: 封装了一下GM_cookie