バックグラウンドスクリプトオブジェクトにアクセスするにはクロムエクステンション内にコンテンツスクリプトを作成するにはどうすればよいですか?コンテンツスクリプトからバックグラウンドスクリプトオブジェクトにアクセスする
// this will store settings
var settings = {};
// load settings from background
chrome.extension.sendMessage({
name: "get-settings"
}, function(response) {
debugger;
settings = response.data.settings;
});
私が持っているバックグラウンドスクリプト内側::私が持っているコンテンツのスクリプトで
var Settings = function() {
var me = this;
// internal, default
var settingList = {
serverUrl : "http://automatyka-pl.p4",
isRecordingEnabled : true,
isScanEnabled : true
};
this.get = function(key) {
return settingList[key];
};
this.set = function(key , value) {
if (settingList[key] != value) {
var setting = {};
setting[key] = value;
chrome.storage.sync.set(setting, function() {
settingList[key] = value;
});
}
return true;
};
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.name == 'get-settings') {
sendResponse({
data : {
settings : settings
}
});
return true;
}
});
var settings = new Settings();
Messagingは動作しますが、私は意味の応答が送信されますが、返されたオブジェクトは空です。あなたはそれを解決する方法を知っていますか?
EDIT あなたのコメントと回答に基づいて、私の質問に異なる光を追加しようとします。
実際の問題は次のとおりです。 コンテンツスクリプトから背景「モデル」にアクセスする方法
コンテンツスクリプトは、ページのDOM変更に連続して応答すると仮定します。変更が検出されると、コンテンツスクリプトの内部で処理が行われます。しかし、この処理は拡張設定に依存します。これらの設定は、ページアクションポップアップスクリプトを介して設定することができ、背景モデルにこれらの設定を通知します。
ので、いつでもページがコンテンツスクリプトで処理され、それは背景スクリプト内部に格納され現在の設定に注意する必要があります。
すでに説明したように、バックグラウンドから設定を引き出すのは非同期な処理なので、コンテンツスクリプト内でさらに処理するためにコールバックが必要です。それ以上の処理は設定を待つ必要があります(同期的に処理する必要があります)。
この場合、どのようなプログラムフローが表示されるのか想像がつきにくいです。
- 背景負荷
- ページの負荷を(初期化設定) - >コンテンツスクリプトのロード
- コンテンツスクリプトが設定を要求 - >更なる処理は、コールバック関数の内部で行われます。設定
- ユーザーの変更は、バックグラウンドの設定が変更された
- ページの変更がトリガされ、コンテンツスクリプトが応答
- コンテンツスクリプトは、設定を要求 - >さらなる処理がコールバック関数の内部で行われている - しかし、それは、PTのように同じ機能することはできません。 3(コンテンツ "モデル"は初期化する必要はありません)?
すべてのクロム。*関数コールバックを持つAPIは非同期です。 「非同期呼び出しからの応答を返すにはどうすればよいですか?」(https://stackoverflow.com/q/14220321) – wOxxOm
が見つかりました!私はコードを再構成する必要があるようだ。 –
[非同期呼び出しから応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –