私は、localStorageデータベースへのデータの取得と設定を担当するバックグラウンドスクリプトを用意しています。私のコンテンツスクリプトは、データを送受信するためにバックグラウンドスクリプトと通信する必要があります。Chrome拡張機能の非同期メッセージ受け渡しに最適なデザインパターンは何ですか?
今は、コマンドとデータを含む関数にJSONオブジェクトを送信します。そのため、データベースにオブジェクトを追加しようとすると、addObjectというコマンド属性とデータである別のオブジェクトを持つJSONが作成されます。これが完了すると、バックグラウンドスクリプトは、それが成功したという応答を返します。
この関数の別の使用例は、成功/失敗ではなくオブジェクトを返す場合のデータを要求することです。
バックグラウンドスクリプトから返されたオブジェクトを取得しようとすると、コードがハックします。
ここで私がよく慣れていないことは、おそらくシンプルな設計上の問題があるようです。将来の/有望な設計上の問題を示唆している人もいますが、私は非常に良い例は見つけていません。
コンテンツスクリプト
function sendCommand(cmdJson){
chrome.extension.sendRequest(cmdJson, function(response){
//figure out what to do with response
});
}
背景スクリプト
if (request.command == "addObject"){
db[request.id]= JSON.stringify(request.data);
sendResponse("success");
}
else if(request.command == "getKeystroke"){
var keystroke = db[request.id];
sendResponse(keystroke);
}
コマンドの実行後にどのコードを返すのかを決定するにはどうすればよいですか?私は返されたデータを見ていますか、またはどの関数を呼び出すかを明示的に記述するフィールドを追加すべきですか? – ZeroDivide
コンテンツスクリプトでどのような関数を呼び出すかを記述します。アップデートを参照してください。 – katspaugh