google chrome extension - temas - ¿Obteniendo "este" ID de pestaña del script de contenido en la extensión de Chrome?
google chrome extension grammarly (3)
La identificación de la pestaña se pasa automáticamente dentro del objeto MessageSender :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log("sent from tab.id=", sender.tab.id);
});
Desde un script de contenido, ¿es posible acceder a la ID de esa pestaña? Deseo enviar un mensaje a la página de fondo desde el script de contenido que le dice a mi extensión "hacer algo con esta pestaña" usando la API chrome.tabs. *. Se necesita un TabID, y no tiene sentido hacer un montón de lógica en la página de fondo para buscar un TabID cuando mi script de contenido simplemente puede indicarle el TabID en el contenido del mensaje.
Si desea la tabId
de usted mismo (en mi caso en Content Script) sin requerir el permiso " tabs
", una solución es hacer que Content Script envíe un mensaje ficticio a la secuencia de comandos de fondo, luego sender.tab.id
secuencia de comandos de fondo responda con sender.tab.id
al guión de contenido!
por ejemplo, en content.js
:
chrome.runtime.sendMessage({ text: "what is my tab_id?" }, tabId => {
console.log(''My tabId is'', tabId);
});
y en background.js
:
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.text == "what is my tab_id?") {
sendResponse({tab: sender.tab.id});
}
});
es una solución estúpida que funcionó para mí. :)
PD. Ah, si tienes permisos de tabs
entonces puedes ejecutar esta consulta asíncrona muy fácilmente:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
var myTabId = tabs[0].id;
chrome.tabs.sendMessage(myTabId, {text: "hi"}, function(response) {
alert(response);
});
});
Si está utilizando puertos para conexiones bidireccionales de larga duración, el segundo argumento en la devolución de llamada es un objeto Port, por lo que para acceder a la ID de la pestaña se encuentra:
chrome.runtime.onConnect.addListener(port => {
if (port.name === "foo") {
port.onMessage.addListener((msg, sendingPort) => {
console.log("sent from tab.id=", sendingPort.sender.tab.id);
});
}
});