内容脚本不会收到我发送的对象

时间:2014-09-06 08:07:31

标签: javascript google-chrome-extension

我正在制作Chrome扩展程序,我希望将内容脚本中的消息发送到后台脚本,请求发回的var。像这样:

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返回undefined。我无法找到原因。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

chrome.runtime.sendMessage是异步的。

您的函数canGo()将在发送消息后立即终止,稍后将异步调用回调。您不能立即使用响应,必须在回调中使用它。

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