如何同步背景和内容之间的消息?

时间:2011-02-28 12:29:30

标签: javascript google-chrome google-chrome-extension chromium

我目前在我的背景和内容中遇到了沟通问题。问题是他们可以沟通,但似乎是异步的。

让我告诉你我的代码。

yourToolbar.js

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";
    }       
}
});

真正的问题是,当我隐藏工具栏时,工具栏只会在1次刷新后消失。因此,似乎通信不是最新的......当我在控制台上打印“激活”的值时,它显示了良好的值,但显然yourtoolbar.js上的条件测试了之前的“激活”值< / p>

有人有想法吗?

编辑:一个奇怪的想法,就是如果我在条件完成之前添加一个警报就可以完美地运作......

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

1 个答案:

答案 0 :(得分: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
    } 
});