L'ouverture et la fermeture d'un nouvel onglet lors du téléchargement
Sur de nombreux sites (Dropbox en étant un bon exemple), lorsque vous cliquez sur un document pour le télécharger, il ouvre une nouvelle fenêtre/onglet, puis l'invite de téléchargement s'affiche, l'onglet/fenêtre se ferme immédiatement (alors que l'invite de commandes reste ouverte).
Comment puis-je reproduire ce comportement à l'aide de javascript?
Je pense qu'une approche serait de détecter l'apparition de l'invite de téléchargement, puis utilisez window.close()
. Cependant, je ne suis pas sûr de savoir comment détecter cette invite.
Un cross-browser solution est préférable, mais rien qui marche dans Firefox est grandement apprécié.
Précisions
- Je fais cela dans un script Greasemonkey
- Le "lien" qui s'ouvre dans un nouvel onglet n'est pas nécessairement un lien direct vers le document. Parfois c'est une simple page qui lance le téléchargement en arrière-plan. Je fais référence à ce type de sites qui ont leur page "download"...ceux qui disent quelque chose comme "votre téléchargement va commencer sous peu, si elle ne démarre pas, veuillez cliquer ici".
Plus de précisions: en ce qui concerne le type de site web mentionné dans la clarification 2 ci-dessus, ce que je veux faire est de cliquer sur le lien de téléchargement, ont donné de téléchargement de chargement de la page dans une nouvelle fenêtre et la fenêtre se ferme une fois que le téléchargement a été lancé.
window.open
, de pointer vers une URL (ce qui est à télécharger), et les en-têtes HTTP de la réponse sont spécifiques pour être téléchargé par l'utilisateur. Dès que la réponse frappe le navigateur, il se ferme automatiquement lui-même - que vous n'avez pas à faire quelque chose. Je vais voir si je peux trouver un exemple que j'ai utiliséÊtes-vous à l'aide d'un serveur web spécifique?
Par exemple, vous avez besoin d'utiliser quelque chose comme ceci - stackoverflow.com/questions/8897458/... - en fonction de votre serveur web
Je ne suis pas totalement sûr de ce que vous demandez...entendez-vous ce site que je suis en train de mettre en œuvre? En fait, je suis juste à faire un petit script Greasemonkey, et il y a plusieurs sites différents, j'aimerais mettre en œuvre ce comportement.
Eh bien, où êtes-vous stocker les fichiers que vous souhaitez autoriser les utilisateurs à télécharger? Vous devez stocker les fichiers quelque part, puis de les rendre accessibles à l'utilisateur. Rendant disponible n'est pas assez, vous avez à servir le contenu sur HTTP et définir les en-têtes appropriés pour le faire se comporter de la façon dont vous le souhaitez. Je suppose que je ne suis pas sûr de savoir comment greasemonkey œuvres
OriginalL'auteur skittleys | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Il y a trois éléments de base de ce que vous voulez:
target="_blank"
. L'onglet doit être ouvert avec javascript, ainsi que javascript soit autorisé à fermer le moment venu.Pour cette discussion, reportez-vous à cette page de test à jsFiddle. Il est structuré comme ceci:
où la
a.dwnPageLink
liens chaque ouvrir une "page de Téléchargement", ce qui lance automatiquement le téléchargement d'un fichier après un court délai.Intercepter les liens de téléchargement (
a.dwnPageLink
):Nous intercepter les liens comme ceci:
Noter que nous avons également ajouter une classe CSS, de sorte que nous pouvons rapidement voir quels liens ont été touchés.
openInNewTab
sera détaillé ci-dessous. Il doit à la fois ouvrir un onglet, et cela doit cesser le lien normal de l'action.Envoyer le lien à un nouvel onglet:
Nous devons utiliser
window.open()
pour gérer le lien. Si la page n'est pas ouvert parwindow.open
, notre script ne sera pas en mesure de le fermer.Noter que
GM_openInTab()
ne peut pas être utilisé car il ne cause pas dewindow.opener
être réglé correctement et ne fournit pas un mécanisme pour fermer l'onglet.Le nouvel onglet est lancé dans
openInNewTab
, qui ressemble à ceci:Gérer le "popup" de l'onglet:
Il n'est pas possible de surveiller la boîte de dialogue de Fichier à partir du lancement de la page. Donc, nous devons mettre le script à exécuter également sur le "popup" de l'onglet. Ajouter
@include
directives en conséquence.Le popup partie de notre script permet de détecter la boîte de dialogue de Fichier par le suivi de la
beforeunload
événement. Les navigateurs feu lebeforeunload
événement, juste avant l'ouverture de la boîte de dialogue de Fichier (et aussi un peu avant l'onglet se ferme, mais nous ne pouvons ignorer que).Cependant, nous ne pouvons pas fermer l'onglet lorsque la boîte de dialogue s'affiche. Cela permettra de fermer la boîte de dialogue. Nous avons donc ajouter un petit temps de retard, et un "Confirmer" dialogue de sorte que la languette restera ouvert jusqu'à ce que la boîte de dialogue de Fichier est fermé. Pour désactiver la boîte de dialogue de confirmation, appuyez sur Entrée un temps supplémentaire (ou Cliquez sur OK).
Le code ressemble à ceci:
Remarque:
window.opener
. Sur une page qui s'ouvre par le javascript, ce qui aura une valeur non null.Script complet:
Ce script fonctionne sur la page de test et sur CNET /pages de Téléchargement:
Êtes-vous à l'aide de Greasemonkey version 4 ou plus tard? Si oui, passer à Tampermonkey et essayez de nouveau.
Je parle de ce lien fiddle.jshell.net/qy3NP/show , pas d'addons solutions. De toute façon, il y a ce lien: jsfiddle.net/g5Gn5
Ok merci. Je vais revoir cette réponse dans quelques jours.
OriginalL'auteur Brock Adams
Vous pouvez le faire simplement à l'aide de
<a>
balise par la mise entarget="_blank"
Démo: http://jsfiddle.net/g5Gn5/
Il va ouvrir une nouvelle fenêtre/onglet et fermer automatiquement une fois la boîte de dialogue de fichier s'affiche.
_blank
juste s'ouvre dans une nouvelle fenêtre/onglet, mais n'a aucun effet sur la façon dont il est ouvertoui, c'est un fichier zippé et mon démo fonctionne. Merci pour le downvote.
Haha eh bien tout simplement parce qu'il travaille sur un fichier ne veut pas dire que c'est une solution universelle. Comme je l'ai souligné, on ne peut pas utiliser
_blank
...simplement essayer d'utiliser ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.jsJe ne peux pas fournir des solutions complètes. Vous devez définir
header
pour téléchargerjs, html, txt
ou n'importe quel texte au format des fichiers.Cette solution ne fonctionne pas pour moi. Voir ma clarification de la question d'origine.
OriginalL'auteur Muthu Kumaran
il suffit d'utiliser cette solution simple :
OriginalL'auteur APB