I have this strange problem:
on content_script:
function getText(){
    var = text;
    chrome.extension.sendMessage({}, function(response){
        text = response.data;
    });
    return text;
}
if (getText()) {
    console.log('OK')
} else{ 
    console.log('Not OK')
}
on background.js:
var text = 'tests';
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
    sendResponse( { 'data': text } );
})
Place a breakpoint on line return text and you get OK on console.
Disable breakpoints and you get only Not OK.;
Seems to be some timing problem, like text not being defined at the time of return, unless you give Chrome some time by using a breakpoint.
manifest.json:
{
  ...
  "permissions": ["tabs"],
  "background": {
    "scripts": ["js/background.js"]
  },
  "content_scripts": [ 
        {
            ...
            "js": [ "js/content_script.js"], 
            "run_at": "document_end"
    } 
  ],
  "manifest_version": 2
}
Can someone reproduce this?
