2009-11-17 5 views
4

Le code JavaScript ci-dessous comporte deux étapes.Comment j'attends que location.href se termine en JavaScript?

Étape 1: accédez à .pdf, .doc, .exe ou à quelque chose qui n'est pas html natif. Si location.href a pris le contrôle de la fenêtre du navigateur, il n'est pas nécessaire de passer à l'étape 2. (Les fichiers PDF prennent généralement le contrôle de la fenêtre du navigateur). La plupart des autres choses lancent un processus de gestionnaire de téléchargement. Tels que .exe. Mais il y a certaines choses telles que les documents Word qui pourraient être soit un téléchargement ou un spectacle directement dans la fenêtre du navigateur en fonction de la configuration du navigateur. Je veux qu'il fasse ce que hef.location ferait faire.

Étape 2: Mais si le téléchargement d'un fichier tel qu'un fichier .exe est terminé, passez à la page d'accueil.

Ou solution pour attendre juste 5 secondes entre les étapes 1 et 2 semblent fonctionner la plupart du temps. Mais sur une connexion plus lente, cela ne fonctionne pas toujours. Ensuite, il va à la page d'accueil sans terminer le premier appel href.location et ils ne voient jamais le PDF et ne voient que la page d'accueil.

FYI ... La raison pour laquelle je les enveloppe dans setTimeOut est liée à ce problème de firefox. Stack Overflow: 864633 assigning-to-document-location-href-without-clobbering-history

Ma question: Y a-t-il un moyen de savoir quand le processus location.href est terminé?

<script language="JavaScript"><!-- 
function windowOnLoad() { 
    setTimeout(function(){ 
     location.href='/someurl/something.pdf'; //sometimes this is .doc file 
    },0); 
    setTimeout(function(){ 
     location.href='/homepage'; 
    },5000); 
    return false; 
} 
//--> 
</script> 
+0

Avez-vous PHP installé? – powtac

+0

Vous ne serez pas en mesure de le faire avec javascript seul, sauf si vous utilisez ajax pour poster une demande. Lisez ceci, cela pourrait aider: http://stackoverflow.com/questions/1524487/browser-download-complete-event – Andrew

Répondre

0

Vous avez deux options pour autant que je peux dire

  • Lien vers le fichier dans une fenêtre pop-up (les navigateurs devraient normalement fermer eux-mêmes cela si la seule chose qu'ils trouvent un fichier téléchargeable) et à la temps redirigé vers la page de destination
  • Construire dans une fonction dynamique des liens vers la page de destination et initie le téléchargement là, mais qui pourrait ne pas être utile dans votre cas

javascript pur ce qui est impossible tunneliers téléchargement thro Un script côté serveur ne peut pas non plus gérer les redirections. Vous devrez y aller avec une solution inbetween j'ai peur

2

Je ne crois pas qu'il soit possible de faire ce que vous demandez en JavaScript. Lorsque vous définissez quelque chose sur window.location, vous demandez au navigateur de charger l'URL spécifiée dans la fenêtre en cours. Lorsque le navigateur fait tout le code sur la page précédente cesse de fonctionner.

Voici quelques possibilités de partir du haut de ma tête:

  • Chargez le fichier externe dans une fenêtre ou une nouvelle fenêtre. Je n'ai pas essayé cela donc je ne suis pas sûr de savoir comment cela fonctionnera dans tous les navigateurs.
  • Utilisez la langue côté serveur que vous utilisez pour diffuser le fichier. Vous aurez alors la possibilité de rediriger le client après que le fichier a été servi.
1

Comme d'autres l'ont indiqué, il n'y a pas d'événement 'onDownloadComplete' disponible pour Javascript. Toutefois, si vous êtes prête à afficher un différent en le téléchargement est en cours, vous pouvez utiliser la technique suivante:

  1. à la page A, ont un lien vers la page B
  2. à la page B, affichez la contenu que vous souhaitez afficher les utilisateurs alors que le fichier est en cours de téléchargement
  3. dans l'élément de la page B, ajouter une balise META qui commence effectivement le téléchargement, à savoir,

    <head> 
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" /> 
    </head> 
    

Le résultat final est que le navigateur continue à afficher le contenu de (2), mais invite également l'utilisateur à enregistrer le téléchargement via la boîte de dialogue "Enregistrer sous ...".

De nombreux sites de téléchargement comme CNet et Sourceforge utilisent une technique similaire.

Questions connexes