Domanda

Sto cercando di creare un'estensione Chrome che è un sostituto per il bookmarklet Delicious. So che c'è già un'estensione che lo fa, ma il problema con tale estensione è che dopo si segnalibro di un sito, i soggiorni delle finestre pop-up si aprono (anziché utilizzare il bookmarklet, dove il pop-up si chiude dopo l'invio del modulo. Ho ricreato il estensione e incontrato lo stesso problema.

Ecco il mio codice:

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

Quando si fa clic sul pulsante di Delicious, il popup viene su bene e posso salvare il preferito ma dopo faccio clic su "Salva", il pop-up non si chiude. Entrambi gli avvisi visualizzati, ma self.close() non sembra di fare nulla. Quando rimuovo il controllo di URL nel contentscript.js, il pop-up si presenta come di consueto, la prima segnalazione incendi subito, e poi il pop-up si chiude (come dovrebbe).

Perché non si questo lavoro? Non sembra come Chrome mi impedisce di fare self.close (). È delizioso facendo qualcosa? E 'qualcosa di diverso?

I file sono qui se li volete: [link rimosso perché drop.io cessato l'attività]

È stato utile?

Soluzione

Prova window.close(), ma che probabilmente non avrebbe funzionato neanche.

Come si sta creando finestra regolare (piuttosto che di azione del browser pop-up), allora si può chiudere utilizzando chrome.tabs.remove() da una pagina di sfondo. È inoltre possibile rilevare questa finestra da una pagina di sfondo. Qualcosa di simile:

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

Non sono sicuro di come Chrome tratta creati finestre se - come schede o finestre. Se le finestre poi sopra il codice sarà un po 'diverso.

Altri suggerimenti

ho trovato molto facile attorno al lavoro a questo. Basta impostare la scheda selezionata su True e scompare popup, come questo ...

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

ho trovato questa soluzione: chrome.tabs.update({ active: true }); Questa singola riga di codice chiude la finestra pop-up dell'azione browser. È anche non c'è bisogno di passare tab.id lì perché di default è impostato su id della scheda corrente. Corro nella pagina di sfondo, ma sembra che può essere eseguito in tutta l'estensione.

getSelected non funziona per me, così ho trovato questa soluzione

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

in background.js è necessario solo

window.close();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top