Не могли бы вы создать расширение, концентратор, который используется для регистрации других расширений и имеет концентратор обмена сообщениями.
Все расширения, которые хотели связаться с общедоступной БД, могли бы затем сделать это через концентратор.После инициализации с фоновой страницы каждое расширение может зарегистрировать в хабе свой идентификатор и на какие события они хотят подписаться.
Зарегистрировать действие для каждого расширения
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
}
}
}
}
});