您可以从Safari扩展发送带有XmlHttpRequest的cookie吗?

您可以从Safari扩展发送带有XmlHttpRequest的cookie吗?,safari,safari-extension,Safari,Safari Extension,在调试为什么我的扩展在Safari中不起作用(但对其他浏览器起作用)时,注意到我可以在Safari工具栏扩展中使用XmlHttpRequest发送任意组合的HTTP头。但尝试对名为“Cookie”的标题执行与以前相同的操作,它不会被发送 那么Safari是否会限制通过请求发回Cookie,或者您需要遵循另一个流程才能做到这一点?这似乎有点蹩脚,因为它会阻止需要会话状态持久性的应用程序的功能。如果有另外一个过程,苹果会让在扩展中维护会话状态变得更加困难(调整web应用或其他浏览器扩展的额外工作)

在调试为什么我的扩展在Safari中不起作用(但对其他浏览器起作用)时,注意到我可以在Safari工具栏扩展中使用XmlHttpRequest发送任意组合的HTTP头。但尝试对名为“Cookie”的标题执行与以前相同的操作,它不会被发送

那么Safari是否会限制通过请求发回Cookie,或者您需要遵循另一个流程才能做到这一点?这似乎有点蹩脚,因为它会阻止需要会话状态持久性的应用程序的功能。如果有另外一个过程,苹果会让在扩展中维护会话状态变得更加困难(调整web应用或其他浏览器扩展的额外工作)


我在Mac OS X 10.7.5和Charles proxy上使用Safari 5.1.7进行了测试。

我想我应该发布对我有效的解决方案,我在前面的问题中对此进行了评论,以便其他有类似问题的人更容易查看:

事实证明,对于Safari扩展,对我有效的是将浏览器设置为不阻止任何cookie和网站数据。因此,用户必须这样做才能使用扩展。不需要更改代码。但这并不酷


具体步骤是
Safari>Preferences>Privacy>Cookies和网站数据:始终允许
(至少在Mac OS Yosemite上的Safari 10下)。尽管人们可以尝试“允许我访问网站”,看看这个更严格的选项是否有效

认为浏览器会自动发送与请求相关的cookie,不需要其他选择,检查那里的情况,可能您忘记了在客户端设置cookie。正如我在问题中提到的,其他浏览器工作正常,可以自动传递/持久化会话cookie,而无需开发人员为扩展编写任何cookie处理。另一方面,Safari不会这么做。我试图通过手动解析cookie并通过使用XmlHttpRequest设置请求头来传递它,Safari仍然不会传递它,但它确实会传递一个虚构的非官方头,就像我设置的“我的头:垃圾数据”一样。它只是不会传递任何名为“Cookie”的头。另一方面,有趣的是,Mac OS X桌面小部件/小工具确实允许您使用XmlHttpRequest设置cookie请求头。但它似乎不允许读取document.cookie,因此我不得不对一个web服务进行黑客攻击,该服务将会话cookie值转发给我,然后使用XmlHttpRequest调用进行设置。由于Safari扩展不允许设置该请求头,因此我无法使用相同的解决方法,因此陷入了困境。如果有人想知道我在说什么,请尝试在下面的Google代码项目中使用Safari扩展。您将在源代码中看到MacOSX小工具版本调用web服务以获取会话状态,然后将其持久化。你找到解决这个问题的办法了吗?这让我抓狂……你是说
Safari>Preferences>Privacy
settings()还是别的什么?是的,谢谢你的提问,更新了答案。顺便说一句,苹果的支持链接现在似乎无效了?