可以跨子域共享HTML5数据库和localStorage吗?
我正在尝试使用Safari跨子域共享数据。 我想使用HTML5数据库(特别是localStorage,因为我的数据不过是键值对)。 但是,好像存储到domain.com的数据不能从sub.domain.com访问(反之亦然)。 在这种情况下有没有办法共享一个数据库?
2016年更新
这个来自Zendesk的图书馆为我工作。
样品:
枢纽
// Config st subdomains can get, but only the root domain can set and del CrossStorageHub.init([ {origin: /\.example.com$/, allow: ['get']}, {origin: /:\/\/(www\.)?example.com$/, allow: ['get', 'set', 'del']} ]);
注意$
匹配string的结尾。 上例中的正则expression式将匹配诸如valid.example.com
类的valid.example.com
,但不能与invalid.example.com.malicious.com
匹配。
客户
var storage = new CrossStorageClient('https://store.example.com/hub.html'); storage.onConnect().then(function() { return storage.set('newKey', 'foobar'); }).then(function() { return storage.get('existingKey', 'newKey'); }).then(function(res) { console.log(res.length); // 2 }).catch(function(err) { // Handle error });
有一个简单的方法来使用跨域的任何东西,只是创build简单的页面,将被包含在您尝试访问的域上托pipe的代理iframe ,将PostMessage发送到该iframe,并在内部iframe中执行您的LocalStorage数据库操作。 这里是链接到文章,这与lcoalStorage做到这一点 。 这里是演示,发送消息到子域中的不同页面检查源代码,它使用iframe和PostMessage。
谷歌浏览器默认阻止从另一个域的iFrame的localStoage访问,除非启用了第三方cookie,iPhone上的Safari也是如此…唯一的解决scheme似乎是打开不同域上的父域,然后发送给子通过window.postMessage但在手机上看起来丑陋和狡猾…