72 votes

Obtention de l'ID d'onglet « cet » à 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 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.

122voto

serg Points 43893

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);
});

12voto

Lounge9 Points 148

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);
    });
  }
});

3voto

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é.

3voto

Niels Dominguez Points 337

Correction de la réponse sélectionnée pour aujourd'hui :

 chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log("sent from tab.id=", sender.id);
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X