通过Chrome扩展程序内容脚本发送带有Ajax调用的Cookie

Har*_*han 5 cookies ajax google-chrome google-chrome-extension cors

我在为网站提供chrome扩展程序,该扩展程序提供api来检查用户是否已登录。该API用于GET请求。所以,当我不唱歌时,它给人的感觉。

{ status: "ok", authenticated: false}
Run Code Online (Sandbox Code Playgroud)

当我登录时,它给了我

{status : "ok", authenticated: true, id: 123}
Run Code Online (Sandbox Code Playgroud)

这在浏览器,Chrome扩展程序(例如Postman)和高级Rest Client上正常运行。但是,当我在chrome扩展程序背景中使用它时,它总是说我不是经过身份验证的用户。我发现我进行的ajax调用不会发送该域的Cookie,但是Chrome扩展程序(例如Postman或Advanced REST Client)确实会发送Cookie和XHR请求。

任何想法我怎么能使ajax一起发送cookie。

这是我的chrome扩展程序的ajax电话

$.ajax({
    method:"GET",
    //  xhrFields: {
       //   withCredentials: true
       // },
       // crossDomain: true,
        url:"http://test-staging.herokuapp.com/user/details",
        success: function(result){
          if(result.status=="ok"){
            alert(JSON.stringify(result));
        cb(result.authenticated);
      }
    },
    error: function(err){
      alert("unable to authenticate user "+JSON.stringify(err))
    }
  })
Run Code Online (Sandbox Code Playgroud)

更新1:

我可以从后台脚本中获取域Cookie的详细信息。现在我正在寻找如何通过ajax调用发送cookie?

Vit*_*sov 4

如果内容脚本被注入到来源(协议、主机和端口组合)与 API 来源不同的页面中:

  • 第三方 cookie 阻止功能可能会阻止 cookie 。
    检查是否已启用:chrome://settings/content/cookies
    后台脚本不受其影响(从 Chrome 81 开始)。
  • 设置withCredentials: truecredentials: 'include'用于获取
    或将原点添加到permissions的部分中manifest.json
    要接收响应,无论哪种情况都需要正确的 CORS 标头。

更喜欢将 API 调用移至后台脚本并将数据传递至内容脚本,以sendMessage规避第三方 cookie 阻止、CORB 和 CORS 限制。如果您选择这样做,请将 API 来源添加 permissionsmanifest.json.

  • 只是想感谢您的回答和后台脚本的建议!在我的内容脚本中,我使用“chrome.runtime.sendMessage”告诉后台脚本(服务工作人员)发出请求,然后在“chrome.runtime.onMessage.addListener”的“sendResponse”回调中发送响应。不会弄乱 cookie 设置或任何东西,而且效果就像一个魅力! (2认同)