const id = 'aaaa'
const myWindow = window.open('某个网址');
myWindow.document.cookie = id=${id}
;
myWindow.opener.document.cookie = id=${id}
;
上面这两个写法都不生效,cookie只能加在第一个页面,不能加在打开的页面。
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吗?
### 回答
如果`window.open()`打开的页面自己不能控制(即你不能在该页面上编写或修改代码),那么直接通过`myWindow.document.cookie`设置cookie是行不通的,因为这种方式要求你对目标页面有脚本控制权。
在这种情况下,你不能直接给这个不可控页面设置cookie。Cookie通常是通过服务器端响应设置的,或者通过客户端脚本在能够控制的页面上设置。如果目标页面不在你的控制范围内,你将无法以编程方式向其添加cookie。
可能的解决方案包括:
1. **服务器端代理**:
如果你的应用可以访问服务器,你可以考虑设置一个服务器端代理。用户首先访问你的服务器,服务器再请求目标页面,并在返回给用户之前设置所需的cookie。
2. **URL参数**:
如果目标页面接受URL参数,你可以尝试通过URL参数传递必要的信息,尽管这不是cookie,但可以作为替代方案。
3. **用户手动操作**:
在某些情况下,可能需要用户手动执行一些步骤(比如点击链接)来触发cookie的设置,如果这些步骤是由你的服务控制的,那么你可以在设计时确保这些步骤能够设置所需的cookie。
总之,如果你不能控制目标页面,那么你不能直接通过编程方式向该页面设置cookie。
设置服务器端代理:
在你的服务器上设置一个代理,用户请求目标页面时,代理服务器会先处理请求。
在代理服务器上设置所需的 cookie,然后将页面返回给用户。
使用 Node.js 和 Express
前端使用 window.open() 打开代理服务器的 URL,而不是直接打开目标页面。
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
5 回答8k 阅读✓ 已解决
3 回答10.3k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
不行,设置 Cookie 浏览器会有
first-party cookie
限制,你操作应该会提示 无效的 Cookie 域名。如果你没有B项目的编辑权限,只能主动去联系B项目一起协作开发。
如果不是完全不一样的域名(
a.com
和b.com
这样),是同一个域名下子域名(a.domain.com
和b.domain.com
)的话,设置Cookie时可以添加domain: domain.com
来设置 Cookie。HTTP Cookie - HTTP | MDN