0

我目前有一个与我的背景和我的内容的沟通问题。问题是他们可以沟通,但似乎是异步的。如何在后台和内容之间同步消息传递?

让我告诉你我的代码。

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次以上的更新只disapear。所以看起来沟通不是最新的......当我在控制台上打印“激活”的值时,它显示出良好的价值,但显然yourtoolbar.js上的条件测试之前的“激活”值

有人有想法吗?

编辑:一个奇怪的认为是,如果我只是在条件前添加一个通知它完美地工作...

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

好,谢谢! 所以他们没有更多的解决方案呢?我们不能像线程那样做一个wait_cond? – Sindar

+1

@Sindar开箱即用。使用回调并不坏,只需要改变你的程序工作流程。 – serg

相关问题