web-dev-qa-db-ja.com

HTML5データベースとlocalStorageはサブドメイン間で共有できますか?

Safariを使用してサブドメイン間でデータを共有しようとしています。 HTML5データベースを使用したい(具体的にはlocalStorage。データはキーと値のペアにすぎないため)ただし、domain.comに保存されたデータはsub.domain.comからアクセスできない(またはその逆)ようです。この状況で単一のデータベースを共有する方法はありますか?

60
Sebastian Celis

更新2016

これは、Zendeskの library でした。

サンプル:

ハブ

// 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/50646

12
super1ha1

クロスドメインの何かを使用する簡単な方法があり、プロキシとして含まれるシンプルなページを作成するだけですiframeアクセスしようとするドメインでホストされ、送信PostMessageそのiframeおよびiframe内で、LocalStorageデータベース操作を行います。 lcoalStorageでこれを行う記事 へのリンクがあります。そして、ここに サブドメインの別のページにメッセージを送信するデモ ソースコードをチェックし、iframeとPostMessageを使用します。

[〜#〜] edit [〜#〜]:新規 sysend.jsライブラリのバージョン (上記のデモで使用)ブラウザがサポートしている場合はBroadcastChannelを使用しますが、iframeが必要です。また、最近のバージョンでは、クロスオリジンメッセージの使用が簡素化され、リポジトリにiframeのhtmlがあり、それを使用できます(または、libを使用して単一のスクリプトタグで単純なhtmlファイルを使用できます)。 sysend.proxy('https://example.com'); example.comにはproxy.htmlファイル(独自のファイル名と異なるパスを使用することもできます)。

9
jcubic

Google Chromeはデフォルトで別のドメインのiFrameからのlocalStoageアクセスをブロックします。ただし、サードパーティのCookieが有効になっている場合、iPhoneでSafariを有効にしない限り...別のドメインを使用して、window.postMessageを介してChildに送信しますが、電話ではくてずるいように見えます...

4
Mad Scientist