javascript - 如何知道在谷歌浏览器扩展中发送的弹出消息
问题描述
我正在编写一个 Google Chrome 扩展程序,现在我正在发送这样的弹出消息:
chrome.tabs.query(
{
active: true,
currentWindow: true,
},
(tabs) => {
const tabId = tabs[0].id;
getConfig((conf) => {
config = conf;
chrome.runtime.sendMessage(
null,
{
text: 'getAllRSS',
tabId: tabId,
},
(feeds) => {handleCallback(feeds);}
);
});
}
);
Google Docs 告诉我chrome.runtime.sendMessage
会发送消息到content.js
,但是当我调试页面并发现消息被发送到background.js
,然后被发送到content.js
时,后台似乎收到了消息并忽略了内容。那么为什么消息首先由后台处理呢?消息传递的规则是什么?我如何知道消息将传递到后台或内容?这是后台js:
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (sender.tab && sender.tab.active) {
if (msg.text === 'setPageRSS') {
handleRSS(msg.feeds, sender.tab.id);
} else if (msg.text === 'addPageRSS') {
addPageRSS(msg.feed, sender.tab.id);
}
}
if (msg.text === 'getAllRSS') {
console.info("获取RSS地址:" + getAllRSS(msg.tabId));
sendResponse(getAllRSS(msg.tabId));
}
});
content.js
还定义:
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.text === 'getPageRSS') {
sendResponse(getPageRSS());
} else if (msg.text === 'getHTML') {
sendResponse(document.documentElement.innerHTML);
}else{
sendResponse(document.documentElement.innerHTML);
}
});
解决方案
推荐阅读
- javascript - 重构获取请求以使用键值对(反应将数据保存到状态)
- snakemake - “其中一个命令以非零退出代码退出;请注意,snakemake 使用 bash 严格模式”,我不确定为什么会收到此错误
- multiple-monitors - 有没有办法让 2 个窗口像 2 个“假”显示器一样工作?
- django - 何时以及如何使用表单方法
- ios - 将 cocoapods 用于 facebookSDK 时找不到“FBSDKAppEvents.h”文件
- plotly - plotly.js图例anc图表之间有过多的空白
- azure-devops - 如何在构建管道上“弹出”GUI?
- angular - 在服务中加载和重新加载数据
- php - 我如何在 wordpress 页面上打印 'bloginfo('url')'
- algorithm - 将多边形投影到边界框中