javascript - 内容脚本未收到我发送的对象

标签 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 返回未定义。我找不到原因。感谢您的帮助!

最佳答案

chrome.runtime.sendMessage 是异步的。

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

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

关于javascript - 内容脚本未收到我发送的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698248/

相关文章:

google-chrome-extension - 开发 Chrome 扩展时,Chrome React Devtools 不显示

google-chrome - 如何使用Windows注册表添加chrome扩展?

javascript - 如何通过单击另一个 div 来获取 div 的类?

javascript - 如何在JavaScript中获取数组中对象的所有键

Javascript滑动元素性能

javascript - Chrome 扩展程序 - 几分钟后 ContextMenu 监听器不工作

javascript - 为什么我无法使用 sendMessage 将函数发送到内容脚本

javascript - 如何从 Chrome 扩展程序获取当前标签页的引荐来源网址?

javascript - spread 属性的语法错误

javascript - 谷歌地图 API v3 通过搜索框缩放到标记