Javascript 我能';在弹出窗口中无法从后台页面获取消息
在弹出窗口中,我无法从后台页面获取消息,我得到“Unchecked runtime.lastError:消息端口在收到响应之前关闭。”清单3中的错误。在这段代码中,我使用带有ES6的webpack 背景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
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)();
}
});
}