Область передачи сообщений Chrome

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

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.
});

person EasilyBaffled    schedule 04.02.2014    source источник


Ответы (1)


Вы правы, область действия изменяется внутри обратного вызова вызова 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));
person berrberr    schedule 04.02.2014
comment
Разве this в this.color не относится к области действия текущей функции, а не к цвету вне ее. - person EasilyBaffled; 05.02.2014
comment
Обычно это так... но именно поэтому я использовал bind для передачи внешней области в обратный вызов. Вы читали связанные документы? ? - person berrberr; 05.02.2014