¿Cómo obtener la URL de la pestaña actualmente abierta en la ventana emergente de acción de mi página?

3 minutos de lectura

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 expresión regular de URL, 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 abierta actualmente y completarla en uno de los campos de la ventana emergente (como cuando hacemos clic en la acción de página de marcador estándar, la URL se completa automáticamente en la ventana emergente que se abre). ¿Cómo puedo hacer algo como esto en las extensiones de Chrome? Probé el paso de mensajes desde la página de fondo al html emergente, pero no funciona. ¿Es posible enviar mensajes así? También intenté configurar onload para el archivo html emergente, pero noté que no se está activando. Por favor, sugiera un método adecuado para hacer frente a este escenario.

avatar de usuario
robar w

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

  • objeto queryInfo:
    • active: true – Para obtener la pestaña activa
    • lastFocusedWindow: true – Para seleccionar la ventana activa
  • función de devolución de llamada:
    Esta función recibe un argumento: una matriz de pestañas coincidentes. Dado que 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 firma.

Fragmento de código:

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

Él activeTab el permiso es suficiente para que esto funcione.

  • Gracias por la respuesta Rob. Pero ahora el problema es cómo hago para que esto se ejecute en la ventana emergente de acción de la página. Probé este código en una etiqueta de secuencia de comandos 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?

    – Jophin Joseph

    3 de mayo de 2012 a las 4:50

  • @JophinJoseph Asegúrese de que se cumplan todas las condiciones: 1. El tab permiso debe establecerse en el archivo de manifiesto. 2. Cuando utilice código en línea, asegúrese de que "manifest_version": 2 no existe en el archivo de manifiesto. Inspeccionar la ventana emergente para ver si aparece algún error.

    – Rob W.

    3 de mayo de 2012 a las 7:21


  • Esto funciona bien con "manifest_version": 2 en el manifiesto.

    – Soviético

    22 de agosto de 2013 a las 9:43

  • ¿Por qué esto usa lastFocusedWindow sobre currentWindow?

    – Stuart P. Bentley

    29 de diciembre de 2013 a las 13:23

  • @ StuartP.Bentley No importa en este caso. Ambos se referirán a la ventana que activó el diálogo de acción de la página. Sin embargo, ver desarrollador.chrome.com/extensions/windows.html#ventana-actual para una nota sobre el significado de currentWindow.

    – Rob W.

    29 de diciembre de 2013 a las 13:32

También puede usar promesas para obtener una forma más limpia de recuperar 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]);
      });
    });
  }

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad