他の拡張機能を登録するために使用され、メッセージング ハブを持つ拡張機能ハブを作成できますか。
パブリック DB との通信を必要とするすべての拡張機能は、ハブを介してそれを行うことができました。バックグラウンド ページからの初期化時に、各拡張機能はハブに ID とサブスクライブするイベントを登録できます。
各拡張機能からアクションを登録する
chrome.tabs.sendRequest("hub", {
action: "register",
key: "somePrivKey",
id: "extId",
subscribeTo: ["createFoo", "deleteFoo"]
});
次に、実行された各アクションがハブに伝達されます。
chrome.tabs.sendRequest("hub", {
action: "createFoo",
key: "somePrivKey",
context: 1
});
次に、ハブ拡張機能がイベントをリッスンします。「登録」アクションの場合、ハブは拡張機能を「subscribeTo」アクションのエンドポイントとして登録します。他のアクション (「createFoo」または「deleteFoo」) の場合、ハブはイベントの登録済み拡張機能のリストを反復処理し、「アクション」名とオプションの「コンテキスト」を送信する sendRequest を実行します。
ハブと、ハブが既知のソース以外からのイベントをリッスンするのを防ぐために、通信するすべての拡張機能との間で共有 "キー" を知ることができます。
ハブ拡張 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
}
}
}
}
});