LINUX.ORG.RU

IndexedDB, onsuccess+setVersion+onupgradeneeded

 


0

1

У одного индийского программиста нашёл такой трюк с IndexedDB (через вызов deprecated setVersion()):

var db = indexedDB.open("test_db","3");
console.log("check(href)"+db);
db.onerror = function(event) {
  console.log("Database error: "+event.target.errorCode);
}
db.onblocked = function(event) {
}
db.onupgradeneeded = function(event) {
  var dbreq = event.target.result;
  // ... (работа с базой)
}
db.onsuccess = function(event) {
  console.log("dbreq.onsuccess");
  var dbreq = event.target.result;
  vreq = dbreq.setVersion("3");
}
}
Вопрос такой: где правильно делать db.close()?
IndexedDB у меня используется для обмена данными между background page и content script. В принципе, можно использовать messages, но я что-то решил попробовать базу данных.
Мне нужно, чтобы в разных js-скриптах одновременно была открыта одна и та же база, через open(), чтобы данные синхронизировались после commit-а, и чтобы close() из одного скрипта (background page) не влиял на работу другого скрипта (один из запущенных content script). Как это правильно сделать? (а то выдаются разные ошибки: с кодами 11, 8, 20).

P.S. Да, забыл добавить. Это chrome extension.

★★★★★

Последнее исправление: pacify (всего исправлений: 1)
Ответ на: комментарий от trashymichael

собственно, зачем там делать close?

А иначе, вылетает ошибка onblocked().
В общем, я так понял, надо на основе openReqShim() написать свою процедуру обращения к базе.
(см. про эту багофичу в новых версиях Хрома - у Parashuram Narasimhan)

pacify ★★★★★
() автор топика
Ответ на: комментарий от trashymichael

Про ошибку BLOCKED - в комментах здесь. Но, вроде бы, это исправили в Chrome 26 (Canary). У меня сейчас установлен Chrome 24.

Надо пробовать.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Надо пробовать.

Хех. Chrome Canary не выпускается для Linux:
"https://www.google.com/intl/ru/chrome/browser/canary.html

В настоящее время Chrome Canary не поддерживается в ОС Linux.
Попробуйте Chrome Canary на платформах Mac OS или Windows.
"

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

я просто не очень врубаю на счет indexedb, тебе точно она нужна? это тоже что и localStorage или нет? может лучше попробовать его? есть некоторые материалы про синхронизацию открытых вкладок через него и воркеры, хотя сам эту тему не подымал пока..

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

это тоже что и localStorage или нет? может лучше попробовать его?

localStorage удаляется же по закрытии браузера?
Мне нужно хранить глобальную для всех вкладок/скриптов базу данных, общую по всем доменам.
Есть globalStorage, но его в хроме сделали «нарезанным» по доменам, для каждого домена - своя база.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

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

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

прийдется дублировать и синхронизировать..

Через что возможна синхронизация, и где будут храниться данные?
В этих браузерах так много deprecated, что я начинаю путаться ... =)

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

как я понял indexedb это вариант localstorage для больших массивов данных (индексируемых). в остальном надо юзать localStorage (или фолбек через куки). примеры синхронизаций между вкладками одного домена есть, тот же вконтакт, например, сообщения, аудио в нем. но если домен разный то такой трюк врятли пройдет, тебе придется для каждого домена поддерживать актуальную копию данных, когда заходишь на сайт — синхронизировать ее. полуркай лучше примеры синхронизаций, может чего дельного почерпнешь.

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

полуркай лучше примеры синхронизаций,

мне уже подсказали evercookie, но по-сути, это набор частностей - там есть и IndexedDB, и другие способы.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

ну чего ты уцепился в свой indexed, это пока только черновик, который вообще слева появился как я потял, от ватвг скорей всего

trashymichael ★★★
()
Ответ на: комментарий от pacify

тебе нужны html5 workers как минимум если хочешь нормальное хранилище а не 4кб в куках.

зы. а за evercookie вообще убивать надобно

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

короче, тебе надо проверить localStorage, работает ли он из расширения на разных доменах как на разных доменах, т.к. например куклоскрипт хранит в нем настройки и на разных доменах работает. есть еще варианты с iframe в background.html и сообщениями, но это ты и сам знаешь как я понял.

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

ну чего ты уцепился в свой indexed

Пару дней потратил, жаль бросать.

есть еще варианты с iframe в background.html и сообщениями, но это ты и сам знаешь как я понял.

Да, пожалуй ты прав. IndexedDB ещё слишком рано использовать.
Я помучался - и решил не ходить по этим граблям пока.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.