为了账号安全,请及时绑定邮箱和手机立即绑定

HTML5数据库和localStorage可以在子域之间共享吗?

/ 猿问

HTML5数据库和localStorage可以在子域之间共享吗?

扬帆大鱼 2019-11-18 12:48:10

我正在尝试使用Safari在子域之间共享数据。我想使用HTML5数据库(特别是localStorage,因为我的数据不过是键值对)。但是,似乎无法从sub.domain.com访问存储到domain.com的数据(反之亦然)。在这种情况下,有什么方法可以共享一个数据库?



查看完整描述

3 回答

?
守着星空守着你

Zendesk的这个库对我有用。


样品:



// Config s.t. 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']}

]);

请注意$用于匹配字符串的结尾。上例中的正则表达式将匹配,例如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

});

检查https://stackoverflow.com/a/39788742/5064633


查看完整回答
反对 回复 2019-11-18
?
哆啦的时光机

有一种使用跨域任何内容的简单方法,只需创建一个简单页面,该页面将作为代理iframe包含在您尝试访问的域中,将PostMessage发送到该iframe,然后在iframe中进行LocalStorage数据库操作。这是使用lcoalStorage执行此操作的文章的链接。这是将消息发送到子域中不同页面的演示的示例,检查源代码,它使用iframe和PostMessage。


编辑:如果浏览器支持,新版本的sysend.js库(由以上演示使用)使用BroadcastChannel,但仍需要iframe。最新版本还简化了跨域消息的使用,您在回购中拥有iframe的html,可以使用(或者可以将带有单个脚本标签的简单html文件与lib一起使用),而在父级中,您只需要调用一个函数sysend.proxy('https://example.com');example.com需要proxy.html文件的地方(您也可以使用自己的文件名和其他路径)。


查看完整回答
反对 回复 2019-11-18
?
拉莫斯之舞

谷歌浏览器默认情况下会阻止从另一个域的iFrame进行localStoage访问,除非启用了第三方Cookie,iPhone上的Safari也是如此...唯一的解决方案似乎是在另一个域上打开父域,然后发送给子域通过window.postMessage,但在电话上看起来丑陋而杂乱...


查看完整回答
反对 回复 2019-11-18

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信