play extensiones chrome añadir aplicaciones accessurl google-chrome google-chrome-extension

google-chrome - añadir - extensiones chrome android



Obtener la pestaña actual y pasarla a la variable en una extensión de Chrome (1)

Intento crear una función que devuelva la URL actual de la pestaña:

function tabURL() { var url=""; chrome.tabs.getSelected(null, function(tab) {url = tab.url;}); return url; }

Cuando uso:

chrome.tabs.getSelected(null, function(tab) {alert(tab.url);});

Chrome muestra la url, pero si uso mi función dentro de la consola de Chrome, la función devuelve "".

¿Hay alguna manera de pasar el tab.url a una variable y luego devolver esta variable?


chrome.tabs.getSelected es asincrónico . Eso significa que cuando se llama a la función de devolución de llamada, la return url "ya se ha producido".

Tienes dos opciones para lograr el efecto deseado.

  1. Correctamente reescriba su código, para implementar correctamente el aspecto asincrónico (los detalles exactos dependen de la implementación de su extensión).
    Tenga en cuenta que getSelected ha quedado en desuso y reemplazado con chrome.tabs.query desde Chrome 16.

  2. Mantenga un hash con las URL actuales usando chrome.tabs.onUpdated (add tabID + URL), chrome.tabs.onRemoved (para eliminar entradas obsoletas) y chrome.tabs.onActivated (para establecer la pestaña activa actual).

Código para 2:

// Our hash var tabIdToURL = {}; var currentTabId = -1; // Add changes to the hash (tab creation, tab''s page load) chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { tabIdToURL[tabId] = tab.url; // also available as tab.id and changeInfo.url }); // Remove entries from closed tabs chrome.tabs.onRemoved.addListener(function(tabId) { delete tabIdToURL[tabId]; }); // Set the ID of the current active tab chrome.tabs.onActivated.addListener(function(activeInfo) { currentTabId = activeInfo.tabId; }); // Usage, based on the question''s function function getURL() { return tabIdToURL[currentTabId] || ''''; }