Публичная база данных между расширениями Chrome - PullRequest
2 голосов
/ 12 января 2012

Я хочу создать общедоступную базу данных, чтобы другие расширения могли получить к ней доступ, создавать таблицы, добавлять объекты, удалять объекты, что они хотят.

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

Существует возможность отправки сообщений на все добавочные номера, не зная их идентификатора? или есть другой способ реализации публичной БД без синхронизации pub-sub?

Кстати - я могу использовать localStorage или WebSQL.

1 Ответ

1 голос
/ 19 января 2012

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

Все расширения, которые хотели связаться с общедоступной БД, могли бы затем сделать это через концентратор.После инициализации с фоновой страницы каждое расширение может зарегистрировать в хабе свой идентификатор и на какие события они хотят подписаться.

Зарегистрировать действие для каждого расширения

chrome.tabs.sendRequest("hub", {
    action: "register",
    key: "somePrivKey",
    id: "extId", 
    subscribeTo: ["createFoo", "deleteFoo"]
});

Затем каждое выполненное действиебудет передан на концентратор:

chrome.tabs.sendRequest("hub", {
    action: "createFoo",
    key: "somePrivKey",
    context: 1
});

Расширение концентратора будет затем прослушивать события.Для действий «register» концентратор регистрирует расширение как конечную точку для действий «subscribeTo».Для других действий («createFoo» или «deleteFoo») концентратор будет перебирать список зарегистрированных расширений для события и выполнять sendRequest, который отправляет имя «action» и необязательный «context».

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

расширение хаба background.js:

var actionToExtMap = {};

chrome.extension.onRequestExternal.addListener(function(request, sender, sendResponse) {
    if (request.key === "somePrivKey") {
        if (request.action === "register") {
            for (i = 0; i < request.subscribeTo.length; i++) {
                var action = request.subscribeTo[i];

                var extsionsForAction = actionToExtMap[action] || [];
                extsionsForAction.push(request.id)
            }

        } else if (request.action) {
            var extensionsToSendAction = actionToExtMap[request.action];
            for (i = 0; i < extensionsToSendAction.length; i++) {
                chrome.extension.sendRequest(extensionsToSendAction[i], {
                    action: request.action,
                    context: request.context //pass an option context object
                }
            }
        }
    }
});
...