tabs.sendMessage()
Envoi un message unique depuis le script d'arrière plan d'extension (ou autre scripts accrédité, comme les scripts popup ou les scripts de page d'options) vers n'importe quel script de contenu concerné par l'extension et qui s'execute dans l'onglet spécifié.Ce message sera reçu dans script de contenu par n'importe quel gestionnaire d'évènements à l'écoute de l'évènement
runtime.onMessage
. Les gestionnaires d'évènements peuvent optionellement envoyé une réponse en retour au script d'arrière plan en utilisant l'argument sendResponse
.
Il s'agit d'une fonction asynchrone qui renvoit un objet Promise
.
Note : Vous pouvez également utiliser une approche basée sur la connexion pour échanger des messages.
Syntaxe
var sending = browser.tabs.sendMessage(
tabId, // integer
message, // any
options, // optional object
);
Paramètres
tabId
-
integer
. ID de l'onglet qui contient le script de contenu auquel on veut envoyer un message. message
-
any
. Un objet qui peut être sérialisé en JSON. options
Facultatif-
object
.frameId
Facultatif-
integer
. Envoie le message à un cadre (iframe) spécifique identifiée parframeId
au lieu de tous les cadres de l'onglet. Le fait que le script de contenu soit exécuté dans tous les cadres dépend du paramètreall_frames
dans la sectioncontent_scripts
de manifest.json.
Valeur renvoyée
Un objet Promise
qui sera rempli avec une réponse objet au format JSON envoyé par le gestionnaire de message dans le script de contenu, ou sans arguments si le script de contenu n'a pas renvoyé de réponses. Si une erreur survient durant la connexion avec l'onglet spécifié, ou si n'importe quelle erreur survient, la promesse sera rejeté avec un message d'erreur. Si plusieurs trames répondent au message, la promesse est résolue en une des réponses
Exemples
Voici un exemple de script d'arrière plan qui envoi un message au script de contenu qui s'execute dans l'onglet actif quand le client clique sur l'icone de l'extension. Le script d'arrière plan s'attend également que le script de contenu lui renvoit une réponse:
// background-script.js
"use strict";
function onError(error) {
console.error(`Error: ${error}`);
}
function sendMessageToTabs(tabs) {
for (let 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);
});
Voici le script de contenu associé:
// 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" });
});
Example extensions
Compatibilité des navigateurs
BCD tables only load in the browser
Note :
Cette API est basée sur l'API Chromium chrome.tabs
. Cette documentation est dérivée de tabs.json
dans le code de Chromium code.
Les données de compatibilité relatives à Microsoft Edge sont fournies par Microsoft Corporation et incluses ici sous la licence Creative Commons Attribution 3.0 pour les États-Unis.