8
votes

JavaScript Block Block Page Charges

Mon client souhaite montrer une alerte lors de la saisie d'une page Web.

Cependant, une alerte bloque une charge supplémentaire de la page jusqu'à ce que "OK" soit cliquée et la page doit charger dans l'arrière-plan pendant que l'alerte est affichée.

Une solution serait d'utiliser une alerte personnalisée à l'aide de HTML et de CSS, mais cela ne répond pas aux besoins du client.

Y a-t-il une solution à l'aide de 'Core JavaScript' ou de JQuery pour permettre à la page de charger la page pendant que l'alerte est affichée? Merci.


2 commentaires

Pourquoi ne pas juste attendre que la page soit chargée pour afficher l'alerte?


Je comprends ... pour que vous puissiez faire une alerte personnalisée qui ressemble exactement à la même chose que l'alerte natale :)


3 Réponses :


3
votes

Modifier

voir @ Réponse de Funky pour une solution de contournement dans Firefox. (vraiment intéressant!)


La réponse simple est non, ce n'est pas possible!

La raison est natif alerte () La boîte de dialogue est l'interface utilisateur et JavaScript est une langue de threads unique.

Vous devez utiliser un message de dialogue personnalisé.

Mais, si une requête AJAX est terminée, juste avant de bloquer l'interface utilisateur, lorsque la boîte de dialogue ALERT () est fermée, la réponse AJAX sera / doit être disponible. Donc, vous pouvez toujours faire une demande Ajax juste avant d'afficher une alerte.


2 commentaires

@Funky non, je ne peux pas voir comment cela pourrait fonctionner. Webworkers pourrait être une solution mais elle n'est pas vraiment encore implémentée


Cela fonctionne, mais je n'ai pas entendu parler des travailleurs Web jusqu'à présent. Semble prometteur.



8
votes

Vous devez l'exécuter via un SettimeOut:

setTimeout(function() { alert('hello world'); }, 1);


15 commentaires

Cela ne fonctionne pas: jsfiddle.net/g33et JavaScript est une langue de threads unique


Semble bien alors, mais pourriez-vous fournir un lien pour le voir fonctionner?


@Funky Votre violon ne montre pas de filtrage multiple, il ne montre que vous alerter après quelques ms. Cela comme rien à voir avec la question. Voir mon jsfiddle, c'est ainsi que nous devrions nous attendre à ce que MULTI filetage fonctionne: lors de l'affichage d'alerte (), Console.log () devrait toujours fonctionner, ce qui n'est évidemment pas le cas.


@Roastted c'est ce qu'il voulait. Il souhaitait qu'une alerte apparaisse et, dans l'intervalle, le reste de la page à charger. Si vous remarquez que vous pouvez vous dire voir le texte avant de cliquer sur OK. Vérifiez ceci pour voir la différence: jsfiddle.net/xfunky/wcls6/2


@Dipehparmar Voyez-vous ce que je vois dans votre jsfiddle? Lorsque l'alerte affiche, l'interface utilisateur est bloquée! Il suffit d'utiliser le bouton 'Run' et vous devez comprendre de quoi je parle


@Roastted Je suis désolé mais je peux voir que le site est en cours de chargement dans le fond ... peut être j'utilise Firefox c'est pourquoi je vois une superposition. Mais à ce moment-là, cela fait l'affaire ..


@Dipehparmar c'est vrai, à l'aide de FF L'alerte ne bloque pas! Eh bien, c'est assez nouveau pour moi! On dirait que FF implémente une sorte de web ouvrier, vraiment intéressant! Thx gars! Bien sûr, ce n'est pas un navigateur croisé.


@roasted travaille sur Chrome pour moi. Il suffit de vérifier la compatibilité IE


@Funky à Chrome (Win7) et c'est-à-dire que l'IFrame n'est pas chargé. La demande est terminée, bien sûr, car le retard du délai d'attente, mais l'interface utilisateur n'est pas mise à jour tant que la boîte de dialogue d'alerte est fermée. Pourriez-vous le confirmer de votre côté?


@Roasted, je cours Linux, donc non IE, mais le chrome fonctionne comme le Firefox.


@Funky merci beaucoup.


@Roastted je viens de comprendre ce que vous avez dit à propos de l'iframe, désolé !! Il ne charge pas pour moi non plus, la demande est envoyée mais rien ne se charge. Très étrange. - Capture d'écran: oi42.tinypic.com/2qau4k7.jpg


En réalité, alerte est exécuté après l'analyse de la page: Jsfiddle .


C'est un article intéressant de John Resig: ejohn.org/blog/how-javascript- TIMERS-WORK


Cela ne fonctionne évidemment que si l'autre partie du script a besoin de moins de 1 ms à exécuter. L'alerte bloque toujours dès qu'on appelle.



0
votes

Vous pouvez utiliser une boîte de dialogue personnalisée au lieu d'une zone d'alerte (qui bloque la page de la page). Pour Exemple, jQuery ui dialog est facile à utiliser (mais il existe de nombreux plugins qui faire exactement la même chose).


0 commentaires