Question

Je suis en train de créer une extension Chrome qui est un remplacement pour le bookmarklet délicieux. Je sais qu'il ya déjà une extension qu'il fait, mais le problème avec cette extension est que lorsque vous marquez un site, les séjours de fenêtre pop-up ouvert (par opposition à l'utilisation du bookmarklet, où la fenêtre se ferme après avoir soumis la forme. Je recréée la l'extension et RAN dans le même problème.

Voici mon code:

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

Lorsque je clique sur le bouton délicieux, le menu contextuel revient bien et je peux enregistrer le signet, mais après que je clique sur « Enregistrer », la fenêtre ne se ferme pas. Les deux alertes apparaissent, mais self.close() ne semble pas faire quoi que ce soit. Lorsque je supprime la vérification des URL dans contentscript.js, la fenêtre se présente comme d'habitude, les premiers feux d'alerte tout de suite, puis le menu contextuel se ferme (comme il se doit).

Pourquoi pas ce travail? Il ne semble pas que Chrome me empêche de faire self.close (). Est-ce délicieux faire quelque chose? Est-il autre chose?

Les fichiers sont ici si vous voulez: [lien supprimé car drop.io est sorti des affaires]

Était-ce utile?

La solution

Essayez window.close(), mais ne fonctionnerait probablement pas non plus.

Comme vous créez la fenêtre régulière (plutôt que l'action du navigateur pop-up), vous pouvez le fermer à l'aide chrome.tabs.remove() d'une page d'arrière-plan. Vous pouvez également détecter cette fenêtre d'une page d'arrière-plan. Quelque chose comme:

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

Je ne sais pas comment traite Chrome fenêtres créées si - sous forme d'onglets ou fenêtres. Si les fenêtres alors au-dessus du code sera un peu différent.

Autres conseils

J'ai trouvé un travail très facile autour de cela. Vous définissez simplement l'onglet sélectionné True et les disparait Popup, comme ça ...

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

J'ai trouvé cette solution: chrome.tabs.update({ active: true }); Cette ligne de code ferme la fenêtre de l'action du navigateur. Vous ne même pas besoin de passer tab.id là parce que par défaut, il est réglé sur id de l'onglet en cours. Je cours dans la page d'arrière-plan, mais semble qu'il peut être exécuté partout dans l'extension.

getSelected ne fonctionne pas pour moi, donc je l'ai trouvé cette solution

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

background.js vous avez juste besoin

window.close();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top