【问题标题】:How to synchronized messaging between background and contentscript?如何在后台和内容脚本之间同步消息?
【发布时间】:2011-07-05 17:55:01
【问题描述】:

我目前在我的背景和内容脚本之间的沟通方面存在问题。问题是它们可以通信,但似乎是异步的。

让我给你看我的代码。

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 上的条件测试了“激活”的先前值

有人有想法吗?

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

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

【问题讨论】:

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


    【解决方案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
        } 
    });
    

    【讨论】:

    • 好的,谢谢!所以他们没有更多的解决方案吗?我们不能像线程那样做某种 wait_cond 吗?
    • @Sindar 没有开箱即用的东西。使用回调并没有那么糟糕,只需要改变你的程序工作流程。
    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多