À partir d'un script de contenu, est-il possible d'accéder à l'ID de cet onglet ? Je souhaite envoyer un message à la page d'arrière-plan à partir du script de contenu qui indique à mon extension de "faire quelque chose avec cet onglet" à l'aide de l'API chrome.tabs.*. Un TabID est nécessaire, et il ne sert à rien de faire un tas de logique dans la page d'arrière-plan pour rechercher un TabID lorsque mon script de contenu peut simplement lui indiquer le TabID dans le contenu du message.
Réponses
Trop de publicités?L'identifiant de l'onglet est automatiquement transmis dans l'objet MessageSender :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log("sent from tab.id=", sender.tab.id);
});
Si vous utilisez des ports pour des connexions bidirectionnelles de longue durée, le deuxième argument du rappel est un objet Port, donc pour accéder à l'ID de l'onglet est alors :
chrome.runtime.onConnect.addListener(port => {
if (port.name === "foo") {
port.onMessage.addListener((msg, sendingPort) => {
console.log("sent from tab.id=", sendingPort.sender.tab.id);
});
}
});
Si un script de contenu est injecté par programmation,
une autre approche consiste à stocker tabId
dans une variable globale :
const injectTabId = (callback) => chrome.tabs.executeScript(
tabId,
{code: `window.tabId = ${tabId}`},
callback
);
const injectFile = () => chrome.tabs.executeScript(
tabId,
{file: 'content.js'}
);
injectTabId(injectFile);
Dans le script de contenu, accédez-y avec window.tabId
. La variable
ne sera pas exposé aux scripts de page à cause des scripts de contenu
vivre dans un monde isolé.