Microsoft Edge 扩展在处理 ajax 请求时发送不同的 cookie
Microsoft Edge extensions send different cookies when processing ajax request
我正在将 chrome 扩展程序转换为边缘。但是我发现边缘在处理来自简单页面和扩展的 ajax 请求时发送不同的 cookie。
示例:
从地址栏访问 https://httpbin.org/cookies/set?bar=foo。添加了一个名为 'bar' 且值为 'foo' 的新 cookie。
在边缘扩展的任何后台页面中,使用 fetch
创建一个 ajax 请求
fetch('https://httpbin.org/cookies',{credentials: 'include'});
调试控制台显示 edge 不发送 'bar' cookie。
在后台页面再次创建以下ajax请求
fetch('https://httpbin.org/cookies/set?bar2=foo2',{credentials: 'include'});
现在已经设置了'bar2' cookie,但是仍然没有'bar' cookie。
从地址栏再次访问 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;
我正在将 chrome 扩展程序转换为边缘。但是我发现边缘在处理来自简单页面和扩展的 ajax 请求时发送不同的 cookie。
示例:
从地址栏访问 https://httpbin.org/cookies/set?bar=foo。添加了一个名为 'bar' 且值为 'foo' 的新 cookie。
在边缘扩展的任何后台页面中,使用 fetch
创建一个 ajax 请求fetch('https://httpbin.org/cookies',{credentials: 'include'});
调试控制台显示 edge 不发送 'bar' cookie。
在后台页面再次创建以下ajax请求
fetch('https://httpbin.org/cookies/set?bar2=foo2',{credentials: 'include'});
现在已经设置了'bar2' cookie,但是仍然没有'bar' cookie。
从地址栏再次访问 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;