Javascript Chrome扩展消息未发送响应(未定义)

Javascript Chrome扩展消息未发送响应(未定义),javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,供将来参考:我通过将onMessage/sendMessage分别切换到后台脚本和内容脚本来解决这个问题。我不知道为什么这样做有效,但确实有效 在过去的三个小时里,我一直在试着调试这个程序——我正在构建一个chrome扩展,我发送的一条消息的响应是“未定义的”。我正在尝试获取用户所在选项卡的文本,并使用它进行一些分析 内容脚本: chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) {

供将来参考:我通过将onMessage/sendMessage分别切换到后台脚本和内容脚本来解决这个问题。我不知道为什么这样做有效,但确实有效

在过去的三个小时里,我一直在试着调试这个程序——我正在构建一个chrome扩展,我发送的一条消息的响应是“未定义的”。我正在尝试获取用户所在选项卡的文本,并使用它进行一些分析

内容脚本:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.method == "collectText") {
            sendResponse({data: document.body.innerText, method: "collectText"});
        }
        return true;
    }
);
弹出脚本:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {method: "collectText"}, function(response) {
      if (response) {
        txt = response.data;
        console.log("response arrived");
        console.log(txt);
      } else {
        console.log("No response.");
      }
  });
});
console.logs当前在那里,以便我知道数据是否返回(不是--“无响应”在每次脚本运行时都会被记录,并且
txt
最终未定义)。我不确定这为什么不起作用(我在同一个脚本上尝试了许多变体,但都没有用)。我在扩展或我所在页面的控制台中没有收到任何错误。我应该使用背景脚本而不是在popup.js中编写所有内容吗


谢谢大家!

由于代码+,您可能会遇到错误:

你需要检查一下 属性获取有关错误的信息并进行修复


希望这会有所帮助

供将来参考:我通过将onMessage/sendMessage分别切换到后台脚本和内容脚本来解决这个问题。我不知道为什么会这样,但确实如此。

如果异步返回答案,则可能会发生此类错误。 (尽管在您给出的示例中不可能发生这种情况)

//发送者
runtime.sendMessage(消息,响应=>{
如果(!响应)
错误(“这是一次失败:”,runtime.lastError.message);
});
//接受者
runtime.onMessage.addListener(异步(请求、发送方、发送响应)=>{
var response=等待回答(请求);
发送应答(应答);
});
//这个接收器也有同样的问题
runtime.onMessage.addListener((请求、发送方、发送响应)=>{
承诺某事(请求)。然后(回应=>{
发送应答(应答);
});
});
在这种情况下,您将看到以下错误:
Unchecked runtime.lastError:消息端口在收到响应之前关闭


要修复它,必须从异步
onMessage
侦听器返回
true
。请注意,返回承诺在chrome(,)上不起作用。

您确定使用了所有必需的参数吗?我认为这里的选项不相关,所以我认为是。我没有在选项卡或弹出脚本上收到任何
lastError
错误。Hm,能否尝试将弹出脚本作为后台页面脚本运行并检查结果?将脚本放在background.js中也不起作用。我将相同的代码与
var txt=“hi”放在一起在顶部,当我从popup.js调用txt时,我得到的是“hi”,而不是扩展应该从当前选项卡收集的文本。我刚刚用后台页面上的run检查了您的示例,它对我很有用。我所做的-我刚刚将
setTimeout
添加到
chrome.tabs.query
中,并使一个活动选项卡不是
devtools
。可能您的问题是,在执行时,活动选项卡是
devtools
chrome://extensions
?使用此选项卡将无法正常工作。感谢此提示。。。我不得不点击“检查视图”来查看后台脚本生成的错误。我希望我能理解你的意思。在过去的两天里我也有同样的问题,我失去了生存的意志。。。
// According to the documentation of chrome.runtime.sendMessage, the
// callback is invoked without any arguments when an error occurs