Microsoft Edge 扩展在处理 ajax 请求时发送不同的 cookie

Microsoft Edge extensions send different cookies when processing ajax request

我正在将 chrome 扩展程序转换为边缘。但是我发现边缘在处理来自简单页面和扩展的 ajax 请求时发送不同的 cookie。

示例:

  1. 从地址栏访问 https://httpbin.org/cookies/set?bar=foo。添加了一个名为 'bar' 且值为 'foo' 的新 cookie。

  2. 在边缘扩展的任何后台页面中,使用 fetch

    创建一个 ajax 请求
    fetch('https://httpbin.org/cookies',{credentials: 'include'});
    

调试控制台显示 edge 不发送 'bar' cookie。

  1. 在后台页面再次创建以下ajax请求

    fetch('https://httpbin.org/cookies/set?bar2=foo2',{credentials: 'include'});
    

    现在已经设置了'bar2' cookie,但是仍然没有'bar' cookie。

  2. 从地址栏再次访问 https://httpbin.org/cookies。没有 'bar2' cookie。

是我做错了什么还是 edge 的错误或功能?

发生这种情况是因为 Edge 为扩展和页面上下文拆分了 cookie 存储。我听说过它既是功能又是错误。如果你需要解决这个问题,你可以:

  • 在上下文脚本中发出 ajax 请求并将结果发送回 background.html;
  • 使用较新的 Edge 安装 Insiders Preview(在 Edge 39.14936 上测试),它应该正确附加 cookie;
  • 如果您只需要一个 cookie 值,您可以调用 browser.cookie.get API。不适用于 HttpOnly cookie;