2012-05-02 14 views
19

Quiero crear una extensión para iniciar sesión automáticamente en mis servidores. Así que creé una página de fondo para verificar la URL actual y si se ajusta a mi URL regex, mostraré el ícono de acción de la página. Al hacer clic en la acción de la página, abro una ventana emergente con algunos campos. Necesito obtener la URL actualmente abierta y completarla en uno de los campos en la ventana emergente (como cuando hacemos clic en la acción de la página de marcador estándar, la URL se rellena automáticamente en la ventana emergente que se abre). ¿Cómo puedo hacer algo como esto en las extensiones de Chrome? Probé Message Passing desde la página de fondo al popup html pero no funciona. ¿Es posible enviar mensajes como ese? También traté de configurar onload para el archivo html emergente pero noté que no se está disparando. Sugiera un método adecuado para enfrentar este escenario.¿Cómo obtener la URL de la pestaña abierta actualmente en la ventana emergente de mi acción de página?

Respuesta

43

Uso chrome.tabs.query con los siguientes parámetros:

  • QueryInfo objeto:
    • active: true - Para obtener la ficha activa
    • lastFocusedWindow: true - Para seleccionar la ventana activa
  • función de devolución de llamada:
    Esta función recibe un argum ent: una matriz de pestañas combinadas. Como solo una ventana puede estar activa, y una pestaña dentro de esta ventana, la matriz tiene solo un elemento. Este elemento es un objeto con el Tab signature.

Código fragmento:

// Do NOT forget that the method is ASYNCHRONOUS 
chrome.tabs.query({ 
    active: true,    // Select active tabs 
    lastFocusedWindow: true  // In the current window 
}, function(array_of_Tabs) { 
    // Since there can only be one active tab in one active window, 
    // the array has only one element 
    var tab = array_of_Tabs[0]; 
    // Example: 
    var url = tab.url; 
    // ... do something with url variable 
}); 

El permiso activeTab es suficiente para que esto funcione.

+0

Gracias por la respuesta de Rob. Pero ahora el problema es que cómo lo ejecuto en la ventana emergente de acción de la página. Intenté este código en una etiqueta de script en la sección principal del archivo html emergente, pero no se ejecuta cuando abro la ventana emergente. De todos modos, puedo hacer que esto se ejecute cuando se abre la ventana emergente? –

+1

@JophinJoseph Asegúrese de que se cumplan todas las condiciones: 1. La 'pestaña' [permiso] (http://code.google.com/chrome/extensions/manifest.html#permissions) se debe establecer en el archivo de manifiesto. 2. Al usar código en línea, asegúrese de que ['" manifest_version ": 2'] (http://stackoverflow.com/a/10417745/938089?communication-between-contentscript-js-and-chrome-extension) no lo haga existir en el archivo de manifiesto. [Inspeccionar la ventana emergente] (http://code.google.com/chrome/extensions/tut_debugging.html#inspect-popup) para ver si aparece algún error. –

+0

Gracias Rob. Eso resolvió mi problema. –

2

También puede utilizar las promesas de una forma más limpia de la recuperación de una pestaña:

getCurrentTab().then(function(tab){ 
    // Do something w/tab 
    }); 

    function getCurrentTab(){ 
    return new Promise(function(resolve, reject){ 
     chrome.tabs.query({ 
     active: true,    // Select active tabs 
     lastFocusedWindow: true  // In the current window 
     }, function(tabs) { 
     resolve(tabs[0]); 
     }); 
    }); 
    } 
Cuestiones relacionadas