0

私は現在、私の背景と私のcontentscriptとのコミュニケーションに問題があります。問題は、それらが通信できることですが、非同期であるようです。バックグラウンドとcontentscriptの間でメッセージを同期させる方法は?

私のコードを教えてください。

chrome.extension.sendRequest({getStatut : "none"}, function(response) 
{ 
    console.log('yourToolbar : ' + response.statut); 
    localStorage['activated'] = response.statut; 
}); 

if (localStorage['activated'] == "show") 
{ 
     // injection 
} 

background.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{ 
    if(request.getStatut) 
    { 
     console.log('Background : ' + localStorage['activated']); 
     sendResponse({statut : localStorage['activated']}); 
    } 
    else if(request.modifyToolbar) 
{ 
    if (request.modifyToolbar == "hideToolbar") 
    { 
     localStorage['activated'] = "hide"; 
    }  
} 
}); 

yourToolbar.jsは、本当の問題は、私は、ツールバーを非表示にすると、ツールバーは1つだけ多くのリフレッシュ後disapearということです。だから、コミュニケーションが最新ではないようです...私はコンソールに "有効"という値を表示すると良い値を示していますが、yourtoolbar.jsの状態が "活性化"の前の値をテストしていることが明らかです

誰かがアイデアを持っていますか?

EDIT:一つの奇妙な...私はちょうど条件の前にアラートを追加する場合、それは完璧に動作していることである、と考えて

alert(ocalStorage['activated']); 
     if (ocalStorage['activated']== "show") 
     { 

答えて

1

ChromeとすべてのAPIメソッドのすべてのメッセージング非同期です(?)。

だからあなたtoolbar.jsは、次のようになります。

chrome.extension.sendRequest({getStatut : "none"}, function(response) 
{ 
    console.log('yourToolbar : ' + response.statut); 
    localStorage['activated'] = response.statut; 

    //inside a callback 
    if (localStorage['activated'] == "show") 
    { 
      // injection 
    } 
}); 
+0

OK感謝を! それでは、それはそれ以上の解決策ではありませんか?私たちはスレッドのようにwait_condの並べ替えを行うことはできませんか? – Sindar

+1

@Sindarすぐには何もありません。コールバックを使用することはそれほど悪くはありません。プログラムのワークフローを変更するだけです。 – serg

関連する問題