La fermeture de la fenêtre popup créé par Google Chrome extension
Je suis en train de créer une extension Chrome qui est un remplacement pour le Délicieux bookmarklet. Je sais qu'il y a déjà une extension qui le fait, mais le problème avec cette extension est qu'une fois que vous mettre un site en signet, la fenêtre reste ouverte (plutôt que d'utiliser le bookmarklet, où le popup se ferme après la soumission du formulaire. J'ai recréé l'extension et a couru dans le même problème.
Voici mon code:
manifeste.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');
}
Quand je clique sur le Délicieux bouton, la fenêtre contextuelle arrive très bien et je peux enregistrer le signet, mais après je clique sur "Enregistrer", le popup ne se ferme pas. Deux alertes, mais self.close()
ne semble pas faire quoi que ce soit. Quand j'ai supprimer l'URL de vérifier dans contentscript.js, le popup se lève comme d'habitude, la première alerte se déclenche tout de suite, et puis le popup se ferme de lui-même (comme il se doit).
Pourquoi ne pas ce travail? Il ne semble pas comme Chrome m'empêche de le faire soi-même.close(). Est Délicieux de faire quelque chose? Est-ce autre chose?
Les fichiers sont ici si vous voulez: [lien supprimé car la baisse.io est allé hors de l'entreprise]
- La fenêtre se ferme automatiquement pour moi. Je suis en cours d'exécution assez de la version par défaut de Chrome si cela fait une différence.
Vous devez vous connecter pour publier un commentaire.
Essayer
window.close()
, mais que, probablement, ne fonctionne pas non plus.Que vous êtes la création régulière de la fenêtre (plutôt que le navigateur d'action popup), alors vous pouvez fermer à l'aide de
chrome.tabs.remove()
à partir d'une page d'arrière-plan. Vous pouvez également détecter cette fenêtre à partir d'une page d'arrière-plan. Quelque chose comme:Je ne suis pas sûr de savoir comment Chrome traite créé sous windows même si - comme les onglets ou fenêtres. Si comme windows puis code ci-dessus sera un peu différent.
Je l'ai trouvé très facile à travailler autour de cela. Vous venez de définir l'onglet sélectionné pour Vrai et la fenêtre Contextuelle disparaît, c'est comme ça...
chrome.tabs.getSelected
est aujourd'hui obsolète.J'ai trouvé cette solution:
chrome.tabs.update({ active: true });
Cette seule ligne de code ferme le navigateur d'action de la fenêtre pop-up. Vous n'avez même pas besoin de passer de l'onglet.id là parce que par défaut, elle est définie à l'id de l'onglet en cours. Je l'exécute en arrière-plan de la page mais il semble qu'il peut être exécuté partout dans l'extension.getSelected ne fonctionne pas pour moi, j'ai donc trouvé cette solution
dans background.js vous avez juste besoin de