文档手册

Cookie

2024-05-14 09:21:37

在JS中通过ICP消息操作cookie:

JS代码:

<script type="application/javascript">
    function message() {
        return document.getElementById("message");
    }
    //显示cookie
    function VisitCookie() {
        message().innerHTML = "";
        //触发go中监听的事件
        ipc.emit("VisitCookie", function (data) {
            message().innerHTML = data;
        });
    }
    //显示cookie的结果,从go中返回到html
    ipc.on("VisitCookieResult", function (data) {
        message().innerHTML = message().innerHTML + data + "<br><br>";
    });

    //删除cookie
    function DeleteCookie() {
        message().innerHTML = "";
        //触发go中监听的事件
        ipc.emit("DeleteCookie", function (data) {
            message().innerHTML = data;
        });
    }

    //设置cookie
    function SetCookie() {
        message().innerHTML = "";
        //触发go中监听的事件
        ipc.emit("SetCookie", function (data) {
            message().innerHTML = data;
        });
    }
</script>
</head>
<body style="overflow: hidden;margin: 0px;padding: 0px;">
<button onclick="VisitCookie()">查看cookie</button>
<button onclick="DeleteCookie()">删除cookie</button>
<button onclick="SetCookie()">设置cookie</button>
<br>
<div id="message">

</div>



GO代码:

//监听获取cookie事件
ipc.On("VisitCookie", func(context context.IContext) {
   fmt.Println("VisitCookie")
   info := cef.BrowserWindow.GetWindowInfo(context.BrowserId())
   info.Chromium().VisitURLCookies("https://www.baidu.com", true, 1)
   info.Chromium().VisitAllCookies(1)
   context.Result("执行成功,结果将在 SetOnCookiesVisited 事件中获得")
})
//监听删除cookie
ipc.On("DeleteCookie", func(context context.IContext) {
   info := cef.BrowserWindow.GetWindowInfo(context.BrowserId())
   info.Chromium().DeleteCookies("", "", false)
   context.Result("执行成功,结果将在 SetOnCookiesDeleted 事件中获得")
})
//监听设置cookie
ipc.On("SetCookie", func(context context.IContext) {
    //在ipc响应中获取当前的浏览器对象
   info := cef.BrowserWindow.GetWindowInfo(context.BrowserId())
   
   info.Chromium().SetCookie("https://www.example.com", "example_cookie_name", "1234", "", "/", true, true, false,
    time.Now(), time.Now(), time.Now(), consts.Ccss_CEF_COOKIE_SAME_SITE_UNSPECIFIED, consts.CEF_COOKIE_PRIORITY_MEDIUM, false, 0)
    
   info.Chromium().SetCookie("https://www.example.com", "example_cookie_name2", "123422", "", "/", true, true, false,
    time.Now(), time.Now(), time.Now(), consts.Ccss_CEF_COOKIE_SAME_SITE_UNSPECIFIED, consts.CEF_COOKIE_PRIORITY_MEDIUM, false, 0)
    
   info.Chromium().SetCookie("https://www.baidu.com", "demo_name", "4321", "", "/", true, true, false,
    time.Now(), time.Now(), time.Now(), consts.Ccss_CEF_COOKIE_SAME_SITE_NO_RESTRICTION, consts.CEF_COOKIE_PRIORITY_MEDIUM, false, 1)
   context.Result("执行成功,结果将在 SetOnCookieSet 事件中获得")
})


//在SetBrowserInit中设置cookie事件,这些事件将返回操作后的结果
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow cef.IBrowserWindow) {
   //获取cookie时触发
   event.SetOnCookiesVisited(func(sender lcl.IObject, cookie *cef.ICefCookie) {
      fmt.Printf("SetOnCookiesVisited: %+v\n", cookie)
      //将结果返回到html中
      data, _ := json.Marshal(cookie)
      ipc.Emit("VisitCookieResult", string(data))
   })
   //删除cookie时触发
   event.SetOnCookiesDeleted(func(sender lcl.IObject, numDeleted int32) {
      fmt.Printf("SetOnCookiesDeleted: %+v\n", numDeleted)
   })
   //设置cookie时触发
   event.SetOnCookieSet(func(sender lcl.IObject, success bool, ID int32) {
      fmt.Println("SetOnCookieSet: ", success, ID)
   })
   event.SetOnCookiesFlushed(func(sender lcl.IObject) {
      fmt.Println("OnCookiesFlushed")
   })
   event.SetOnCookieVisitorDestroyed(func(sender lcl.IObject, ID int32) {
      fmt.Println("OnCookieVisitorDestroyed")
   })
})



CookieManager 使用:

cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {
   window.Chromium().SetOnLoadEnd(func(sender lcl.IObject, browser *cef.ICefBrowser, frame *cef.ICefFrame, httpStatusCode int32) {
      manager := browser.GetRequestContext().GetCookieManager(nil)
      url := frame.Url()
      fmt.Println("manager:", manager, url)
      visitor := cef.CookieVisitorRef.New()
      visitor.SetOnVisit(func(cookie *cef.ICefCookie) (deleteCookie, result bool) {
         fmt.Printf("cookie: %+v\n", cookie)
         window.Chromium().SetCookie(url, cookie.Name, cookie.Value, cookie.Domain, cookie.Path, cookie.Secure, cookie.Httponly, cookie.HasExpires, cookie.Creation, cookie.LastAccess, cookie.Expires, cookie.SameSite, cookie.Priority, cookie.SetImmediately, cookie.ID)
         fmt.Println("\tFlushCookieStore:", window.Chromium().FlushCookieStore(true))
         return false, true
      })
      manager.VisitAllCookies(visitor)
   })
})