我正在创建一个可在各种域中使用的书签。我想设置一些cookie来存储这个bookmarklet的临时设置,所以我假设从这个脚本设置一个cookie会将cookie分配给脚本来源的域。
情况并非如此,书签可以将cookie分配给正在查看的当前网站的域。这不适合我的需要(这会记住每个域的设置,而不是所有域中的书签)。
我的问题是,这是否会以某种方式打破跨域政策?还有一个后续问题,我如何为小书签存储cookie,而不是使用正确的域。
答案 0 :(得分:3)
Bookmarklet正在当前页面的上下文中运行,因此它们是运行的安全上下文,因此不会破坏跨域策略。您只能在当前页面的域中设置cookie。因此,您的书签不能拥有自己的cookie。
这与从各种域加载到给定页面的脚本相同。页面的来源是重要的,而不是脚本的起源。
我知道您在所有域中为脚本保存一次设置的唯一方法是使用跨域JSONP并将设置存储在您的服务器上,但您仍然可能难以识别唯一用户。
听起来你正在尝试做的事情更适合于具有插件本地存储空间的浏览器插件。
答案 1 :(得分:0)
它不会破坏跨域策略,因为它实际上是在一个单独的域上运行(这是书签的背后)。
如果您想存储cookie信息,请使用第三方服务(例如,拥有自己的服务器,其代码可以接受cookie更改)。 请注意,这可能是一个安全问题,因为除非您将服务设为只写(我怀疑),否则每个域都可以为您的用户获取Cookie。
然后还有另一种选择 - 不要在cookie中保存设置。改为使用不同的存储介质。