Pregunta

Estoy intentando crear una extensión de Chrome que es un reemplazo para el bookmarklet delicioso. Sé que ya hay una extensión que lo hace, pero el problema con esa extensión es que después de marcar un sitio, las estancias de la ventana emergente se abren (en lugar de utilizar el bookmarklet, en la ventana emergente se cierra después de enviar el formulario. He recreado el extensión y se encontró con el mismo problema.

Aquí está mi código:

manifest.json:

{
  "name": "Delicious",
  "version": "1.0",
  "description": "Bookmark a site on Delicious",
  "background_page": "background.html",
  "permissions": [ 
    "tabs" 
  ],
  "browser_action": {
    "default_icon": "delicious.png"
  },
  "content_scripts": [
    {
      "matches": ["http://www.delicious.com/save*"],
      "js": ["contentscript.js"]
    }
  ]
}

background.html:

<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.getSelected(null, function(tab) {
    w = window.open('http://delicious.com/save?url='+
          encodeURIComponent(tab.url)+
          '&title='+encodeURIComponent(tab.title)+
          '&v=5&noui=1&jump=close',
        'deliciousuiv5',
        'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
  });
});
</script></html>

contentscript.js:

if (document.URL == 'http://www.delicious.com/save')
{
  alert('closing...');
  self.close();
  alert('should have closed by now');
}

Al hacer clic en el botón delicioso, la ventana emergente sube muy bien y puedo guardar el marcador, pero después de hacer clic en "Guardar", la ventana emergente no se cierra. Ambas alertas aparecen, pero no parece self.close() que hacer nada. Cuando quito el cheque URL en contentscript.js, la ventana emergente aparece como normal, se disparará el primer alerta de inmediato, y luego la ventana emergente se cierra en sí mismo (como debería).

¿Por qué no funciona esto? No parece como Chrome me impide hacer self.close (). Está haciendo algo delicioso? Es algo más?

Los archivos están aquí si quieres ellos: [link eliminado por drop.io salió del negocio]

¿Fue útil?

Solución

Trate window.close(), pero que probablemente no funcionaría bien.

Mientras esté creando ventana normal (en lugar de la acción emergente del navegador), entonces usted puede cerrarlo utilizando chrome.tabs.remove() de una página de fondo. También puede detectar esta ventana desde una página de fondo. Algo así como:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(changeInfo.status == "loading") {
        if(tab.url == "http://www.delicious.com/save") {
            chrome.tabs.remove(tabId);
        }
    }
});

No estoy seguro de cómo trata a Chrome crean ventanas aunque - como pestañas o ventanas. Si a continuación, como ventanas por encima de código será un poco diferente.

Otros consejos

He encontrado una muy fácil en torno al trabajo de esta. Que acaba de establecer la pestaña seleccionada en True y desaparece la ventana emergente, como este ...

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});

He encontrado esta solución: chrome.tabs.update({ active: true }); Esta sola línea de código cierra la ventana emergente de la acción del navegador. Usted incluso no necesita pasar tab.id allí porque de forma predeterminada se establece en id de la pestaña actual. Corro en la página de fondo, pero parece que se puede ejecutar en todas partes de la extensión.

getSelected que no trabaja para mí, así que me encontré con esta solución

chrome.tabs.create({url: 'https://www.google.com', active: false});

en background.js que necesita sólo

window.close();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top