#google-chrome #indexeddb
#google-chrome #indexeddb
Вопрос:
Я переключаю домены и хочу предоставить своим пользователям возможность продолжать использовать тот же IndexedDB в моем новом домене.
Я думаю, это невозможно из JavaScript из-за политики того же происхождения. Тем не менее, мои пользователи являются «техническими специалистами», и все они используют Chrome.
Итак, есть ли способ, которым мои пользователи могут вручную перемещать IndexedDB из одного домена в другой? Может быть, какая-то операция копирования файлов в каталоге пользователя Chrome?
Ответ №1:
Вы можете использовать iframe и postMessage()
для передачи данных. Пусть новый домен откроет iframe для старого домена и настроит прослушиватель message
событий. Должен ли старый домен предоставлять страницу, которая при открытии обходит базу данных и выполняет a postMessage()
в родительском окне — указав параметр targetOrigin, чтобы ограничить это правильным новым доменом. Вам нужно будет придумать подходящую схему отправки сообщений для пакетной обработки и сигнализации завершения.
(В Chrome хранилище резервных копий для индексированной базы данных включает источник в самих данных, поэтому вы не можете просто перемещать файлы.)
Комментарии:
1. Легко ли редактировать источник в одном из файлов данных (например, в каком-то файле метаданных?) или он скрыт в каком-то трудно редактируемом двоичном формате? (как вы уже могли догадаться, моих пользователей немного, и все они достаточно технически опытны, чтобы редактировать файлы в шестнадцатеричном редакторе) Я бы выбрал предложенный
postMessage()
вами подход (отличная идея!), Только если действительно необходимы дополнительные усилия 🙂2. Источник существует как ключевой префикс для записей метаданных базы данных в leveldb. В каталоге имеется произвольное количество файлов таблиц leveldb, в зависимости от истории базы данных (сжатие и т. Д.), И записи могут существовать в любом файле таблицы. Записи также сжимаются внутри таблиц. Итак, короткий ответ: я не думаю, что человек мог бы это сделать. : (Я полагаю, технически возможно написание пользовательского клиента leveldb и переопределение процедур сравнения / декодирования ключей Chrome.
3. Спасибо за ваше время и понимание, я попробую использовать подход экспорта-импорта!
Ответ №2:
ВАРИАНТ 1 экспорт / импорт
objectstore.getall() //and done on each store.
некоторые транзакции для добавления данных на новый сайт.
//a few createobjectstore()
for(var i in myobject.length){
objecstore.add(myobject[i]
}
ВАРИАНТ 2
, если chrome и использует расширение Chrome. передо мной нет страницы, но если вы знаете идентификатор своего расширения и другого расширения, вы можете перейти на другой сайт
я хочу сказать, что chrome.runtime.message() используется для обмена данными между backpage расширения и другими страницами расширения, а также для связи с другим сайтом.