window.open()打开一个窗口后,有办法给这个窗口添加cookie吗?

const id = 'aaaa'
const myWindow = window.open('某个网址');
myWindow.document.cookie = id=${id};
myWindow.opener.document.cookie = id=${id};

上面这两个写法都不生效,cookie只能加在第一个页面,不能加在打开的页面。

window.open()打开一个页面后,这个页面自己不能控制,不能编写代码,有办法打开这个页面后给这个页面添加cookie吗?

阅读 1.1k
avatarAI BotBETA
### 回答

如果`window.open()`打开的页面自己不能控制(即你不能在该页面上编写或修改代码),那么直接通过`myWindow.document.cookie`设置cookie是行不通的,因为这种方式要求你对目标页面有脚本控制权。

在这种情况下,你不能直接给这个不可控页面设置cookie。Cookie通常是通过服务器端响应设置的,或者通过客户端脚本在能够控制的页面上设置。如果目标页面不在你的控制范围内,你将无法以编程方式向其添加cookie。

可能的解决方案包括:

1. **服务器端代理**:
   如果你的应用可以访问服务器,你可以考虑设置一个服务器端代理。用户首先访问你的服务器,服务器再请求目标页面,并在返回给用户之前设置所需的cookie。

2. **URL参数**:
   如果目标页面接受URL参数,你可以尝试通过URL参数传递必要的信息,尽管这不是cookie,但可以作为替代方案。

3. **用户手动操作**:
   在某些情况下,可能需要用户手动执行一些步骤(比如点击链接)来触发cookie的设置,如果这些步骤是由你的服务控制的,那么你可以在设计时确保这些步骤能够设置所需的cookie。

总之,如果你不能控制目标页面,那么你不能直接通过编程方式向该页面设置cookie。
5 个回答

不行,设置 Cookie 浏览器会有 first-party cookie 限制,你操作应该会提示 无效的 Cookie 域名

如果你没有B项目的编辑权限,只能主动去联系B项目一起协作开发。

如果不是完全不一样的域名(a.comb.com 这样),是同一个域名下子域名(a.domain.comb.domain.com)的话,设置Cookie时可以添加 domain: domain.com 来设置 Cookie。

HTTP Cookie - HTTP | MDN

理论上只能通过参数来进行传递,你可以通过把 token 传递给第二个页面来共享参数

你打开B网站是为了自己用还是面向普通用户?

为了自己用

可以考虑装一个油猴脚本的插件,打开B网站后,在油猴脚本里操作cookie即可

面向普通用户

无解

设置服务器端代理:
在你的服务器上设置一个代理,用户请求目标页面时,代理服务器会先处理请求。
在代理服务器上设置所需的 cookie,然后将页面返回给用户。
使用 Node.js 和 Express
前端使用 window.open() 打开代理服务器的 URL,而不是直接打开目标页面。

推荐问题
宣传栏