2010-06-16 2 views
2

J'ai un plugin jQuery que j'utilise pour créer dynamiquement et rendre un formulaire sur une page asp.net default.aspx, puis le soumettre. La page à laquelle elle est soumise est une page pdf.aspx. La page génère un fichier PDF puis utilise Response.Write pour écrire le fichier (application/pdf) dans le navigateur. J'utilise la même méthode pour afficher les fichiers XLSX dans le navigateur. Cela fonctionne vraiment bien, mais j'ai besoin d'un rappel ou d'un événement pour indiquer au bouton quand arrêter de tourner. Cela empêche l'utilisateur de cliquer en continu sur les boutons Excel ou PDF. Est-ce que quelqu'un sait un moyen de détecter la fenêtre de dialogue de fichier quand il n'a pas été créé en utilisant javascript? Je suis également ouvert à d'autres méthodes de rappel du côté du serveur.Pouvez-vous utiliser Javascript pour détecter une fenêtre de téléchargement de fichiers créée côté serveur?

+0

Voir http://stackoverflow.com/questions/666468/ie6-detecting-when-the-file-download-popup-is-closed/667281#667281 –

+0

Cette solution sonne bien, mais je ne suis pas clair quant à la pièce de charge. Si le iframe est chargé au chargement de la page, ou dynamiquement créé dans JS, l'onload se produit avant même que le formulaire ne soit soumis. Qu'est-ce que je rate? – Zacho

+0

duplication possible de [Détecter lorsque le navigateur reçoit le téléchargement de fichiers] (http://stackoverflow.com/questions/1106377/detect-when-browser-receives-file-download) – Liam

Répondre

4

La façon dont je fais cela a été suggérée en réponse à une question que j'ai posée il y a quelque temps par T.J. Crowder. Je ne peux pas trouver la réponse de la dernière fois que j'ai écrit ceci parce que la fonction de recherche de Stackoverflow est si incroyablement boiteuse, donc je vais probablement taper dans un article de blog. L'idée de base est que votre code client (Javascript) doit ajouter un paramètre supplémentaire lorsqu'il soumet la requête pour le téléchargement. Le paramètre doit contenir une chaîne aléatoire générée (probablement que l'horodatage actuel est suffisant). Le serveur recherche alors ce paramètre et, lorsqu'il prépare la réponse avec le fichier téléchargé, il définit également un cookie et lui donne cette valeur aléatoire. Juste après le submit (ou juste avant, cela n'a pas vraiment d'importance), le code Javascript devrait démarrer un timer avec une routine pour regarder la valeur de document.cookie et voir si elle contient cette chaîne aléatoire. Dès que le cookie contient cette chaîne, vous savez que le serveur a renvoyé sa réponse et que la boîte de dialogue de téléchargement du fichier a été présentée.

+0

C'est drôle. J'ai essayé cette solution exacte hier, car c'était la seule solution que j'ai trouvée. Une fois le cookie installé du côté serveur, j'ai cherché du côté client en utilisant: setTimeout (complete = checkCookie ("fileComplete"), 2000); toutes les 2 secondes. Cela n'a pas fonctionné car je ne pouvais pas lire le côté client cookie. Peut-être que je vais creuser plus profondément dans cette idée et l'essayer encore aujourd'hui. Si cela fonctionne, je vous le ferai savoir. – Zacho

+0

Eh bien, si vous créez une chaîne aléatoire sur le client, vous n'avez même pas vraiment besoin de rechercher un cookie particulier - vous pouvez juste regarder "document.cookie". Aussi, assurez-vous que votre serveur ne fait pas que vos cookies soient "http-only", sinon votre script ne peut pas les voir! Cette technique fonctionne comme un champion pour moi. – Pointy

Questions connexes