Javascript 我能';在弹出窗口中无法从后台页面获取消息

Javascript 我能';在弹出窗口中无法从后台页面获取消息,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,在弹出窗口中,我无法从后台页面获取消息,我得到“Unchecked runtime.lastError:消息端口在收到响应之前关闭。”清单3中的错误。在这段代码中,我使用带有ES6的webpack 背景 import onInstalled from './onInstalled'; import connectListener from "./connectListener"; import messageListener from "./messageLIste

在弹出窗口中,我无法从后台页面获取消息,我得到“Unchecked runtime.lastError:消息端口在收到响应之前关闭。”清单3中的错误。在这段代码中,我使用带有ES6的webpack

背景

import onInstalled from './onInstalled';
import connectListener from "./connectListener";
import messageListener from "./messageLIstener";

onInstalled(); connectListener(); messageListener();
bakground页面的内容侦听器

import analysis from "./analysis";

const siteUrl = "http://localhost/site_for_parsing/";
const senderName = "background";

export default () => {
chrome.runtime.onConnect.addListener(port => {
    port.onMessage.addListener(msg => {
        if(msg.message === 'analysis') {
            analysis(port).then(tab => {
                chrome.tabs.sendMessage(tab.id, {msg: "analysis background"}, res => {
                    port.postMessage(res)
                    chrome.tabs.remove(tab.id);
                })
            })
        }
    });
});
}
弹出窗口的侦听器

export default port => {
port.onMessage.addListener(msg => {
    console.log(msg)
})
}
弹出窗口

内容脚本的侦听器

import parse from '../parse';

export default () => {
chrome.runtime.onMessage.addListener(
function(req, sender, sendResponse) {
    if(req.msg === "analysis background") {
        let obj = parse();
        sendResponse(obj);
    }
        
    // sendResponse(req);
}
); 
功能分析

import onTabUrlUpdated from '@/onTabUrlUpdated';

const siteUrl = "http://localhost/site_for_parsing/";

export default async port => {
    const tab = await chrome.tabs.create({active:false, url: siteUrl});
    if (!tab.url) await onTabUrlUpdated(tab.id);
    const results = await chrome.scripting.executeScript({
        target: {tabId:tab.id},
        files: ['dist/parser.js'],
    })
    return tab;
}
OnUrlTabUpdated函数用于分析函数

export default tabId => {
    return new Promise((resolve, reject) => {
      const onUpdated = (id, info) => id === tabId && info.url && done(true);
      const onRemoved = id => id === tabId && done(false);
      chrome.tabs.onUpdated.addListener(onUpdated);
      chrome.tabs.onRemoved.addListener(onRemoved);
      function done(ok) {
        chrome.tabs.onUpdated.removeListener(onUpdated);
        chrome.tabs.onRemoved.removeListener(onRemoved);
        (ok ? resolve : reject)();
      }
    });
  }

请帮帮我!提前谢谢。

@wOxxOm我的问题是,我无法从弹出窗口中的后台页面获取消息。抱歉,问题定义不正确。@wOxxOm我刚刚添加了主弹出文件。@wOxxOm。我在弹出窗口的控制台中看到了,我知道inspect,但我不明白你们为什么要使用它。@wOxxOm我刚刚添加了一个主背景文件,但并没有什么新内容。我在弹出页面中创建连接,然后处理文件,然后向弹出页面发送消息。它已经添加了。@wOxxOm很抱歉,我刚刚编辑了,但我的响应为空
export default tabId => {
    return new Promise((resolve, reject) => {
      const onUpdated = (id, info) => id === tabId && info.url && done(true);
      const onRemoved = id => id === tabId && done(false);
      chrome.tabs.onUpdated.addListener(onUpdated);
      chrome.tabs.onRemoved.addListener(onRemoved);
      function done(ok) {
        chrome.tabs.onUpdated.removeListener(onUpdated);
        chrome.tabs.onRemoved.removeListener(onRemoved);
        (ok ? resolve : reject)();
      }
    });
  }