【问题标题】:Can you send cookies with XmlHttpRequest from Safari extension?你可以从 Safari 扩展发送带有 XmlHttpRequest 的 cookie 吗?
【发布时间】:2023-04-10 14:52:02
【问题描述】:

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

那么 Safari 是否限制通过请求发送回 cookie,或者您需要遵循替代流程来执行此操作?似乎有点蹩脚,因为这会阻止需要会话状态持久性的应用程序的功能。如果有替代流程,Apple 会加大在扩展程序中维护会话状态的难度(适应网络应用程序或其他浏览器扩展程序的额外工作)。

我在带有 Charles 代理的 Mac OS X 10.7.5 上使用 Safari 5.1.7 进行了测试。

【问题讨论】:

  • 认为浏览器会自动发送相关的 cookie 和请求,不需要替代方案,检查那里的情况,可能你忘记在客户端设置 cookie。
  • 正如我在问题中提到的,其他浏览器工作正常并自动传递/保留会话 cookie,而无需开发人员为扩展编写任何 cookie 处理。另一方面,Safari 不会那样做。我尝试通过手动解析cookie并通过使用XmlHttpRequest设置请求标头来传递它,但Safari仍然不会通过它,但它确实通过了一个我设置的非官方标头,如“My-Header:废话数据”。它只是不会传递任何名为“Cookie”的标头。对我来说毫无意义。
  • 另一方面,有趣的是,Mac OS X 桌面小部件/小工具确实允许您使用 XmlHttpRequest 设置 cookie 请求标头。它似乎不允许读取 document.cookie,所以我不得不对一个 Web 服务进行破解,该服务为我中继会话 cookie 值,然后使用 XmlHttpRequest 调用进行设置。由于 Safari 扩展不允许设置该请求标头,因此我无法使用相同的解决方法,因此被卡住了。
  • 如果有人好奇我在说什么,请尝试让以下 Google 代码项目中的 Safari 扩展程序正常工作。您将在源代码中看到 Mac OS X 小工具版本调用 Web 服务以获取会话状态,然后持续使用。 code.google.com/p/autosmsclients
  • 您找到解决此问题的方法了吗?它让我发疯......

标签: safari safari-extension


【解决方案1】:

只是想我应该发布对我有用的解决方案,我之前在自己的问题中评论过,以便其他有类似问题的人更容易查看:

结果是 Safari 扩展,对我有用的是将浏览器设置为不阻止任何 cookie 和网站数据。所以用户必须这样做才能使用扩展。无需更改代码。但这并不酷。

具体步骤是Safari > Preferences > Privacy > Cookies and website data: Always allow(至少在 Mac OS Yosemite 上的 Safari 10 下)。尽管可以尝试“允许来自我访问的网站”,以查看该更具限制性的选项是否有效。

【讨论】:

  • 你的意思是Safari > Preferences > Privacy设置(support.apple.com/kb/ph2141)还是别的什么?
  • 是的,感谢您的提问,更新了答案。顺便说一句,Apple 支持链接现在似乎无效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 2011-06-14
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多