Télécharger le binaire sans déclencher une surcharge

Je souhaite lancer un téléchargement de fichier pour un utilisateur quand il clique sur un lien, mais j'ai un gestionnaire onbeforeunload que je ne veux pas invoquer lorsque le téléchargement commence. Pour les téléchargements, j'ai actuellement un <a> avec le href défini sur l'emplacement du fichier, mais en cliquant dessus, onbeforeunload en Chrome (mais pas dans FF).

Je sais que je peux définir un drapeau privé et vérifier que dans le gestionnaire onbeforeunload , mais y onbeforeunload -il un moyen de lancer le téléchargement en utilisant ajax? Je souhaite toujours que l'utilisateur visualise les dialogues habituels lors du téléchargement du fichier (Ouvrir / Enregistrer, etc.).

Des idées?

La meilleure façon de le faire est en effet en construisant un iframe et en déclenchant le téléchargement à partir de là.

J'ai testé dans Chrome, IE6 + et Firefox et cette approche semble fonctionner dans tous.

Exemple de code:

 function DownloadFile(filePath) { var downloadIframe = $('<iframe />', { id : 'downloadIframe' }).appendTo('body'); downloadIframe.attr('src',filePath'); } 

Cela ne fonctionnera que correctement pour un téléchargement unique (car nous avons codé un identifiant), si vous déclenchez plusieurs téléchargements, je vous suggère de réutiliser l'iframe en le stockant dans une variable plus largement accessible.

Ajoutez l'attribut de download à la balise a, ce qui semble empêcher le rechargement de la tir:

 <a download href="mysite.com"></a> 

De cette réponse .

Je suppose que l'utilisation de l'attribut cible sur le lien pourrait faire l'affaire.

 <a href="http://www.example.com/somefile.zip" target="_blank">download</a> 

Ne sera pas validé (à moins d'utiliser le type de jeu de cadre), mais cela pourrait fonctionner .. Il créera un nouvel onglet ou une fenêtre, puis affichera un téléchargement de fichier (si l'en-tête http indique qu'il devrait), mais il pourrait laisser les nouveaux onglets / fenêtres ouverts, Ou il pourrait les fermer après avoir sauvegardé …

D'autre part, je pense avoir un gestionnaire onforeforell que vous ne voulez parfois pas déclencher des sons suspects, pourquoi l'avez-vous besoin de toute façon?

Je sais que cette réponse est vraiment en retard, mais il y a une solution simple. Créez un iframe de manière dynamique, et définissez le "src" de celui-ci sur votre URL de téléchargement via JavaScript. Cela lancera le téléchargement sans déclencher l'événement de déchargement (je pense).