最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 未来cookie获取和更新再不用自己去封装了!

    正文概述 掘金(FE情报局)   2020-12-31   461

    谷歌浏览器87版本更新

    未来cookie获取和更新再不用自己去封装了!

    谷歌浏览器的最新版本在2020年末最后一天是87版本,就在这个版本中,有一个针对于cookie的API,Cookie Store,这个API代替了我们常用的document.cookie的方法,87版本开始就可以在谷歌浏览器中使用,给大家做一个简单的介绍。如果你要使用的话记得判断对应的浏览器版本,必须大于等于87版本

    判断浏览器版本有很多方法,总的来说就是通过navigator用正则去做对应的匹配,在这里就不多说了

    cookie方法简述

    目前来看,大家在cookie方面都是统一的document.cookie,在此基础上做一些额外的操作,但是通常我们不知道的是,当你设置完成一个cookie信息之后,是否设置成功。你还需要再去获取一下你设置的那个cookie的值,看是否已经成功设置,麻烦不说,还影响我们的执行效率。而且对于正则匹配我们拿出来的所有的cookie信息这种方式很尴尬。cookie是否发生了变更,也没有对应的监听,这些都是要解决的

    自然,有杠精说我存储到localStorage不就完事么?场景不一样,用的内容也不一样,如果有需要,可以复习一下localStorage和cookie的区别

    未来cookie获取和更新再不用自己去封装了!

    获取cookie

    刚才我们也提到了,目前都是统一通过document.cookie的方式获取的cookie,然后通过对应的匹配形式。为什么我们只想要name这个对应的cookie信息,但总是要先把所有的拿出来,并且还很开心的觉得自己封装了一个好的获取cookie的方法,这总是过于复杂,而且效率很低

    附上一个我们平时封装的获取cookie信息的方式

    function getCookie (name) {
        let result
        return (result = new RegExp('(?:^|; )' + encodeURIComponent(name) + '=([^;]*)').exec(document.cookie)) ? decodeURIComponent(result[1]) : null
    }
    

    那么如果我们用cookieStore的方式该怎么做呢?

    新的方式的话,需要使用cookieStore并调用其get方法,它返回的是一个promise,所以,当你设置失败的时候,它会告诉你失败并返回失败原因,具体的调用实例如下

    try {
        const cookieValue = await cookieStore.get('cookieName')
        if(cookieValue){
            console.log('cookieName: ', cookieValue)
        } else {
            console.log('cookieValue is null')
        }
    } catch(e) {
        console.error('cookieStore is error: ' + e)
    }
    

    可以发现,这种方式不需要再去遍历一整遍cookie的字断了,当然也不会影响你的同步操作,毕竟这个获取方式是异步的

    设置cookie

    之前我们设置cookie的方式

    document.cookie = 'cookieName=cookieValue; domain: xxx.com'
    

    当然你可以把这种形式封装一下,会有一种更好的写法,但是写法是舒服了,本质还是一样的

    就像之前说的,在设置完成之后,如果我们想知道是否设置成功,那么就需要用getCookie获取一遍,如果能够获取到,那说明没问题

    那么在cookieStore中,我们如何设置呢?

    try {
        await cookieStore.set({
            name: 'cookieName',
            value: true,
            domain: 'xxx.com',
            expires: Date.now()
        })
    } catch (e) {
        console.error('falied:' + e)
    }
    

    通过上述方式就可以设置一个对应的cookie,当然,只要你不经过catch,它就是设置成功

    删除cookie

    之前的方式,我们通常是通过setCookie的形式将对应的cookie的值设置成空,然后将expires的值设置成过期的时间,这样依靠浏览器就会自动删除其对应的内容,这里不再列举

    那么新的方式如何做呢?

    try {
        await cookieStore.delete('cookieName')
    } catch (e) {
        console.error('falied:' + e)
    }
    

    只要没走到catch,那表明删除已经发生并且是正常的

    监控cookie

    当然,新的API肯定有新的方法,那就是你可以监控cookie,当cookie内容发生变化的时候会执行此操作

    cookieStore.addEventListener('change', event => {
        console.log(`${event.changed.length} changed cookies`)
        for (const cookie in event.changed) {
            console.log(`${cookie.name} changed`)
        }
        console.log(`${event.deleted.length} deleted cookies`)
        for (const cookie in event.deleted) {
            console.log(`${cookie.name} deleted`)
        }
    })
    

    总结

    针对以上,似乎chrome团队已经解决了我们的对于cookie的问题,并且这些内容在我们认为理所应当应该存在的东西,但是还是能够希望大家能够很好的去使用,有机会体验一次如果你的项目中有需求的话。

    兼容性别忘记,还是要考虑一下的,但是相信,随着科技的不断发展,这些东西肯定终将不会是问题!


    起源地下载网 » 未来cookie获取和更新再不用自己去封装了!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元