2014-09-06 3 views
0

Я делаю расширение chrome, и я хочу отправить сообщение из сценария контента в фоновый скрипт, запрашивающий var, который отправляет обратно. Как это:Content Script не получает объект, который я отправляю

contentscript.js --> ask for var --> background.js 
              | 
contentscript.js <-- give var <------------ 

Это те файлы:

// contentscript.js 

'use strict'; 

function canGo() { 
    chrome.runtime.sendMessage({ message: 'go' }, function(response) { 
    return response.go; 
    }); 
} 

console.log(canGo()); // undefined 

и

// background.js 

'use strict'; 

var go = false; 

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.message == 'go') { 
     sendResponse({ go: go }); 
    } 
    } 
); 

Таким образом, проблема заключается в том, что функция возвращает canGo неопределенными. Я не могу найти почему. Спасибо за помощь!

ответ

1

chrome.runtime.sendMessage является асинхронным.

Ваша функция canGo() будет прекращена сразу после отправки сообщения, а обратный вызов будет вызываться асинхронно позже. Вы не можете использовать ответ немедленно, вы должны использовать его из обратного вызова.

function canGo() { 
    chrome.runtime.sendMessage({ message: 'go' }, function(response) { 
    console.log(response.go); 
    if(response.go) { /* ... */ } 
    else { /* ... */ } 
    }); 
} 
+0

Спасибо, я этого не знал! – DennisvB

Смежные вопросы