Obtenir l’ID de cet onglet à partir du script de contenu dans l’extension Chrome?

À partir d’un script de contenu, est-il possible d’accéder à l’ID de cet onglet? Je veux envoyer un message à la page d’arrière-plan à partir du script de contenu qui dit à mon extension de “faire quelque chose avec cet onglet” en utilisant le chrome.tabs. * Api. Un TabID est nécessaire et il est inutile 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.

L’ID d’onglet est automatiquement transmis dans l’object 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 longue durée bidirectionnelles, le deuxième argument de la fonction de rappel est un object Port. Par conséquent, pour accéder à l’ID d’onglet, procédez comme suit:

 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 vous voulez le tabId de vous-même (dans mon cas dans Content Script) sans nécessiter l’autorisation ” tabs “, une solution de contournement consiste à faire en sorte que Content Script envoie un message factice au script d’arrière-plan, au script de contenu!

par exemple dans content.js :

 chrome.runtime.sendMessage({ text: "what is my tab_id?" }, tabId => { console.log('My tabId is', tabId); }); 

et dans background.js :

 chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { if (msg.text == "what is my tab_id?") { sendResponse({tab: sender.tab.id}); } }); 

c’est une solution stupide qui a fonctionné pour moi. 🙂

PS Oh, si vous avez la permission des tabs vous pouvez exécuter cette requête asynchrone très facilement:

 chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ var myTabId = tabs[0].id; chrome.tabs.sendMessage(myTabId, {text: "hi"}, function(response) { alert(response); }); });