2009-09-02 7 views
3

Voici la situation:javascript événement d'interruption

Si je suis à la page 1 maintenant je suis en cliquant sur un lien de la page 1 pour accéder à la page 2. Avant que la page 2 ne soit chargée, je suis en train de m'échapper afin que je reste à la page-1.

À ce stade, je veux suivre cet événement.

Y at-il un événement javascript afin que je puisse suivre le scénario ci-dessus.

Plus d'info:

Pour éviter la demande simultanée à la page « 2 », lorsque l'utilisateur clique sur un lien de la page 1 je suis allez être redirigé vers la page 2 et la désactivation du lien (pour éviter la demande multiple .. « en page 2) A ce moment où nous avons atteint Esc et interrompra le chargement en page 2, je dois activer à nouveau le lien dans la page 1

+0

Je ne suis pas sûr que ce soit possible sans une minuterie ou un piratage de navigateur. Et si vous utilisez ce hack, beaucoup de problèmes avec différents navigateurs apparaîtront. Pourriez-vous expliquer pourquoi avez-vous besoin de cet événement? Peut-être qu'il existe une meilleure façon de résoudre votre problème? – bezmax

+1

Pour éviter les requêtes simultanées à la "page-2", lorsque l'utilisateur clique sur un lien de la page-1 je redirige vers la page-2 et désactive le lien (pour éviter les requêtes multiples à "page-2"). nous frappons Esc et avortons chargement de la page-2, j'ai besoin d'activer le lien à nouveau dans la page 1. – Madhu

+0

@Madhu: cette information supplémentaire est utile, vous devez l'ajouter à la question –

Répondre

3

J'ai essayé en utilisant ce code:

<html> 
<head> 
    <script> 
    document.onkeypress = KeyPressed; 

    function KeyPressed(e) 
    { 
     if (!e) e = window.event; //IE Compatibility 
     alert(e.keyCode); 
    } 
    </script> 
</head> 

<body> 
    <a href="http://stackoverflow.com">Stack Overflow</a> 
</body> 
</html> 

Il détecte une touche enfoncée pendant que vous êtes sur la page.Une fois que vous cliquez sur le lien SO et appuyez sur échapper, noth ING arrive. Le navigateur reçoit déjà une réponse du serveur SO et commence à la traiter, cette page a déjà été "laissée", malgré les apparences lorsque vous voyez "En attente de http://stackoverflow.com" dans la barre d'état de votre navigateur.

0

Deux événements sont déclenchés lorsque la page est déchargée.

window.onUnload 
window.onBeforeUnload 

Vous pouvez utiliser ces événements pour annuler le déchargement de la page, mais après cela, il est considéré comme la page fait.

Ce que vous pouvez faire est de rendre la page attendez 5 secondes environ avant d'aller à la nouvelle page:

par exemple:

window.onunload = (function() { 
    var time = new Date(); 
    var cancel = false; 
    window.onkeypress = function (e) { 
    if ((e || window.event).keyCode == 27) cancel = true; 
    }; 
    while(time > new Date() - 5000) { 
    if (cancel) return false; 
    } 
}); 

En fait, ce peut causer certains navigateurs à accrocher puisque vous êtes prendre tout le temps de traitement donné au script JS. c'est-à-dire: dans le bloc while.

Vous pouvez probablement éviter cela en effectuant un appel de fonction de blocage, qui ne nécessite pas beaucoup de processus, comme celui qui est lié par la latence du réseau. Par exemple: XMLHttpRequest() etc. Je ne pense pas que les appels mis en file d'attente tels que setTimeout() fonctionneront ici, car ils ne bloquent pas.

+0

Oui cela gèlera le navigateur. –

0

Étant donné que la balise <a href> indique au navigateur de se déplacer vers une autre page, il lui appartient de décider si le script sera toujours exécuté. Si je l'étais, je n'écouterais pas.

Si vous voulez remplacer, je suppose que vous devez dire au navigateur pas écouter ce événement particulier onClick et mettre un rappel en place qui charge la page cible en arrière-plan. Cela assure que votre page est toujours active. Une fois la page cible chargée (par votre script), vous pouvez demander au navigateur de se mettre à jour avec le contenu reçu.

Voilà donc la théorie. Je n'ai aucune idée si le DOM vous permet juste de remplacer le contenu d'une page chargée, mais je suppose que c'est le cas.

+0

Si la page cible est sur un serveur différent, JS ne vous laissera pas le demander – Alsciende

+0

Je ne suis pas l'expert - il n'y a pas de classe HttpRequest possible pour javascript? Vous pouvez faire XMLHttpRequest, n'est-ce pas? – xtofl

1

Votre idée de gérer cet événement est tout simplement erronée. Bloquer le bouton est nécessaire pour rendre l'utilisateur incapable de faire des données à double message. Cependant, la requête est envoyée instantanément (!) après le clic sur le lien. Donc, si vous cliquez une fois sur le lien, arrêtez la page, puis cliquez une deuxième fois - elle sera envoyée deux fois, et ce n'est pas ce qui est prévu.

Questions connexes