tabs.sendMessage()
从扩展的后台脚本(或其他特权脚本,例如弹出窗口脚本或选项页面脚本)向属于扩展程序并在指定标签页中运行的任何 内容脚本 或扩展程序页面/iframe 发送单个消息。
消息将在扩展程序上下文中由 runtime.onMessage
事件的任何监听器接收。监听器可以选择性地返回某些内容作为对发件人的响应。
这是一个异步函数,返回一个 Promise
。
注意:您也可以使用 基于连接的交换消息方法。
语法
js
const sending = browser.tabs.sendMessage(
tabId, // integer
message, // any
options // optional object
)
参数
返回值
一个 Promise
,它将用内容脚本中消息处理程序发送的响应对象来完成,或者在内容脚本没有发送响应的情况下没有参数来完成。
如果在连接到指定标签页时发生错误,或者发生任何其他错误,则 promise 将被错误消息拒绝。
如果多个帧响应消息,则 promise 会解析为其中一个答案。
示例
以下是一个后台脚本的示例,它在用户点击浏览器操作时向活动标签页中运行的内容脚本发送消息。后台脚本还希望内容脚本发送响应
js
// background-script.js
"use strict";
function onError(error) {
console.error(`Error: ${error}`);
}
function sendMessageToTabs(tabs) {
for (const tab of tabs) {
browser.tabs
.sendMessage(tab.id, { greeting: "Hi from background script" })
.then((response) => {
console.log("Message from the content script:");
console.log(response.response);
})
.catch(onError);
}
}
browser.browserAction.onClicked.addListener(() => {
browser.tabs
.query({
currentWindow: true,
active: true,
})
.then(sendMessageToTabs)
.catch(onError);
});
以下对应的内容脚本
js
// content-script.js
"use strict";
browser.runtime.onMessage.addListener((request) => {
console.log("Message from the background script:");
console.log(request.greeting);
return Promise.resolve({ response: "Hi from content script" });
});
示例扩展
浏览器兼容性
BCD 表仅在启用了 JavaScript 的浏览器中加载。
注意:此 API 基于 Chromium 的 chrome.tabs
API。本文档来自 Chromium 代码中的 tabs.json
。