2011-09-05 36 views
19

cómo obtener la pestaña actual de la página de fondo? tabId actual es la pestaña que el usuario puede ver su contenido.cómo obtener la pestaña actual de la página de fondo

background.html

<html> 
<head> 
    <script> 

    if(typeof localStorage.state == 'undefined') 
     localStorage.state = 'off' 
    chrome.browserAction.onClicked.addListener(function(tab) { 
     if(localStorage.state == 'on') 
     { 
      localStorage.state = 'off'; 
     } 
     else 
     { 
      localStorage.state = 'on'; 
     } 
     chrome.browserAction.setBadgeText({text: localStorage.state, tabId: tab.id}); 
     chrome.tabs.sendRequest(tab.id, {state: localStorage.state}); 
     //chrome.tabs.sendRequest(tab.id, {state: localStorage.state}); 
    }); 
    </script> 
</head> 

Respuesta

2

Muchos métodos de la API interpretan null como una pestaña actual. chrome.tabs.sendRequest es uno de ellos.

lo contrario:

chrome.tabs.getSelected(null, function(tab) { ... }) 
37

getSelected ha sido deprecated. La nueva manera de hacerlo es:

chrome.tabs.query(
    {currentWindow: true, active : true}, 
    function(tabArray){...} 
) 

Si desea realizar alguna devolución de llamada en la pestaña activa, se puede envolver lo anterior como así:

function doInCurrentTab(tabCallback) { 
    chrome.tabs.query(
     { currentWindow: true, active: true }, 
     function (tabArray) { tabCallback(tabArray[0]); } 
    ); 
} 

Por ejemplo

var activeTabId; 
doInCurrentTab(function(tab){ activeTabId = tab.id }); 
+0

@neaumusic Tengo un problema con su edición. Cambia un poco demasiado el código del autor y contiene información falsa ('tabArray [0]' no es un ID). Estoy volviendo a esto. – Xan

+0

@neaumusic Dicho esto, definitivamente puede publicar su código como respuesta. – Xan

+0

Esto ya no parece funcionar. Si hago un 'console.log (activeTabId);' desde dentro de la devolución de llamada (por ej. 'Function (tab) {...}') puedo ver que tab.id está establecido, pero tan pronto como doInCurrentTab regrese, activeTabId permanece indefinido ¿Cambió Google algo que rompió esto? –

4

ejecutar este en su página de fondo

chrome.tabs.query({active:true,windowType:"normal", currentWindow: true},function(d){console.debug(d);}) 

o incluso mejor

chrome.tabs.query({active:true,windowType:"normal", currentWindow: true},function(d){console.debug(d[0].id);}) 
+2

Esto obtendrá todas las pestañas activas en todas las ventanas. Entonces, si tiene más de una ventana abierta, obtendrá varias pestañas atrás. – Soviut

+0

Para los espectadores: fue editado con 'currentWindow' para resolver el problema de Soviut. –

0

chrome.tabs.query

my chrome extension using chrome.tabs.query


function onNextTabDetermined (callback) { 
    chrome.tabs.query({ 
     currentWindow: true, 
     active: true 
    }, function (currentTabs) { 
     var nextTabIndex = (currentTabs[0].index + (forward ? 1 : -1)); 
     if (nextTabIndex === -1) { 
      chrome.tabs.query({ 
       "currentWindow": true 
      }, function (allTabs) { 
       callback(allTabs[allTabs.length - 1]); 
      }); 
     } else { 
      chrome.tabs.query({ 
       "index": nextTabIndex, 
       "currentWindow": true 
      }, function (nextTabs) { 
       if (nextTabs[0]) { 
        callback(nextTabs[0]); 
       } else { 
        chrome.tabs.query({"index": 0}, function (nextTabs) { 
         callback(nextTabs[0]); 
        }); 
       } 
      }); 
     } 
    }); 
}; 
+1

Un poco de explicación de lo que hace este código, y por qué esta respuesta es mejor que otras, sería bienvenido. – Xan

Cuestiones relacionadas