2014-02-04 4 views
1

Я пытаюсь передать сообщения между сценарием контента и фоновым скриптом. Я хочу сохранить значение, отправляемое со справочной страницы, но я думаю, что значение застряло в области вызова сообщения. Как сохранить значение за пределами закрытия функции?Сфера применения chrome message

Content_script.js:

var color = "red"; 
chrome.runtime.sendMessage({method: "getLocalStorage", key: "favColor"}, function(response) { 
    color = response.data; 
}); 

Background.js:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    if (request.method == "getLocalStorage") 
     sendResponse({data: localStorage[request.key]}); 
    else 
     sendResponse({}); // snub them. 
}); 

ответ

2

Вы правильно, изменения сферы применения внутри обратного вызова sendMessage вызова. Чтобы изменить переменную color, вам необходимо передать область в обратный вызов. Один из способов сделать это - использовать метод javascript bind для передачи внешней области в обратный вызов. Это может выглядеть так:

var color = "red"; 
var changeColor = function(response, sender, sendResponse) { 
    this.color = response.data; 
}; 

chrome.runtime.sendMessage({method: "getLocalStorage", key: "favColor"}, 
    changeColor.bind(this)); 
+0

Не означает ли это, что в this.color относится к сфере действия текущей функции, а не к цвету вне его. – EasilyBaffled

+0

Обычно это было бы ... но именно поэтому я использовал 'bind' для передачи« внешней »области в обратный вызов. Вы прочитали [связанные документы] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)? – berrberr

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