我正在开发一个 Crossrider 扩展来记录网页信息。当用户单击扩展按钮时,它会触发一个弹出窗口,在该代码中,我使用 appAPI.request.get() 从 myDomain.com 调用一个 php 页面,该页面读取并设置 myDomain.com 的 cookie 值。这适用于 IE、Chrome、Safari 和 Firefox,但在我的 MacBook 上 Safari 无法设置 cookie。我在 iMac 上运行完全相同版本的 OSX 和 Safari,并且运行良好。我已经仔细检查过这两个首选项是否相同,而且确实如此。
这是否可能是跨域限制?由于远程页面是通过弹出窗口中的 js 调用的,这是否会限制它为其驻留的域 (myDomain.com) 设置 cookie 的能力?
编辑于2014-05-22
/* background.js */
appAPI.browserAction.setPopup({
resourcePath:'index.html',
height: 380,
width: 320
});
...
/* index.html */
appAPI.request.get({
url: 'https://example-domain.com/this-file-sets-a-cookie.php',
....
});
最佳答案
这是 Safari 阻止 cookie 的问题。在某些情况下,cookie 似乎被视为由第三方设置,因此被拒绝。可能是因为地址栏显示的 URL 与设置 cookie 的 URL 不同,即使设置 cookie 的域和为 cookie 指定的域相同。当我将隐私设置更改为“从不”拒绝 cookie 时,我能够设置 cookie。为什么它在一台机器上工作,而在另一台机器上运行相同的操作系统版本、相同的 Safari 版本,并且都设置为拒绝来自“来自第三方和广告商”的 cookie,目前尚不清楚。
幸运的是,我能够删除设置 cookie 的 php 代码,而不会影响我的插件。
关于javascript - 无法使用 appAPI.request.get() 在 Crossrider 中设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796555/