Safariを使用してサブドメイン間でデータを共有しようとしています。 HTML5データベースを使用したい(具体的にはlocalStorage。データはキーと値のペアにすぎないため)ただし、domain.comに保存されたデータはsub.domain.comからアクセスできない(またはその逆)ようです。この状況で単一のデータベースを共有する方法はありますか?
これは、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
});
クロスドメインの何かを使用する簡単な方法があり、プロキシとして含まれるシンプルなページを作成するだけです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
ファイル(独自のファイル名と異なるパスを使用することもできます)。
Google Chromeはデフォルトで別のドメインのiFrameからのlocalStoageアクセスをブロックします。ただし、サードパーティのCookieが有効になっている場合、iPhoneでSafariを有効にしない限り...別のドメインを使用して、window.postMessageを介してChildに送信しますが、電話ではくてずるいように見えます...