Могут ли базы данных HTML5 и localStorage использоваться совместно для поддоменов? - PullRequest
60 голосов
/ 14 ноября 2010

Я пытаюсь обмениваться данными между поддоменами с помощью Safari.Я хотел бы использовать базу данных HTML5 (в частности, localStorage , поскольку мои данные - не что иное, как пары ключ-значение).Однако кажется, что данные, хранящиеся на domain.com , недоступны с sub.domain.com (или наоборот).Есть ли способ разделить одну базу данных в этой ситуации?

Ответы [ 3 ]

12 голосов
/ 30 сентября 2016

Обновление 2016

Эта библиотека от 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

9 голосов
/ 22 июня 2014

Существует простой способ использования междоменного домена, просто создайте простую страницу, которая будет включена в качестве прокси iframe , размещенную на домене, к которому вы пытаетесь получить доступ, отправьте PostMessage на этот iframe а внутри iframe вы выполняете манипуляции с базой данных LocalStorage. Вот ссылка на статью , которая делает это с помощью lcoalStorage . А вот демонстрационная программа, которая отправляет сообщение на другую страницу в поддомене . Проверьте исходный код, в нем используются iframe и PostMessage.

РЕДАКТИРОВАТЬ : Новая версия библиотеки sysend.js (используется в демонстрационной версии выше) использует BroadcastChannel, если браузер поддерживает его, но все же требует Iframe. Последняя версия также упрощает использование сообщений Cross-Origin, у вас есть html iframe в репо, который вы можете использовать (или вы можете использовать простой html-файл с одним тегом script с библиотекой lib), а в parent вам просто нужно вызвать одну функцию sysend.proxy('https://example.com');, где example.com должен иметь файл proxy.html (вы также можете использовать свое собственное имя файла и другой путь).

4 голосов
/ 21 февраля 2016

Google Chrome блокирует доступ к localStoage из iFrame в другом домене по умолчанию, если только сторонние cookie не включены и Safari на iPhone не работает ... кажется, что единственным решением является открытие родительского домена в другом домене и его отправка Ребенку через window.postMessage, но выглядит уродливо и неуклюже на телефонах ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...