【发布时间】: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
-
您找到解决此问题的方法了吗?它让我发疯......