2008-11-17 12 views
8

Je développe un site qui fait un usage intensif de JavaScript (jQuery). Je reçois régulièrement l'IE «Arrêtez d'exécuter ce script? boîte de dialogue d'erreur lorsque j'essaie de fermer le navigateur."Arrêtez d'exécuter ce script?" erreur

Je suppose que le problème se produit parce que le site est une seule page qui utilise AJAX, il n'y a donc pas de publication pour réinitialiser le nombre de commandes exécutées par IE.

Le piratage du registre côté client n'est pas une option.

Est-ce que quelqu'un connaît un moyen de contourner cette erreur? MISE À JOUR: La page comporte un nombre (~ 10) de minuteurs d'intervalles qui interrogent continuellement sur des intervalles de 30 ou 60 secondes.

+0

Vous pourriez vouloir regarder les réponses postées pour la question "[un script sur cette page fait courir IE lentement] (http://stackoverflow.com/questions/212550/a-script-on-this- page-est-causant-ie-à-courir-lentement) ". –

Répondre

3

Utilisez-vous par hasard un gestionnaire window.onunload? Si vous le faites, vous pouvez vérifier que vous n'avez pas de boucle infinie.

Pour vérifier, au bas de votre javascript faire:

window.onunload = null; 

et tester à nouveau.

+0

ce que ce n'est pas le problème dans mon cas. Je courais simplement un long script dans une page. – liammclennan

+0

@liammclennan Donc, vous aviez un script qui était toujours (ou presque toujours) en cours d'exécution, mais seulement à la fermeture de l'onglet une alerte apparaissait-elle? –

1

Vous avez juste un long script/une boucle infinie dans votre code. Plus de détails pourraient obtenir une réponse plus précise.

Si votre page utilise beaucoup d'intervalles, vous devez les annuler avant de quitter la page. Utilisez window.onunload pour effacer tous les intervalles.

4

J'ai également fait face à ce problème et ai surmonté ce problème en divisant le DOM executio continu. Pour cette approche, j'ai utilisé la fonction setTimeout. La résolution complète de ce problème dépend de la façon dont vous divisez l'exécution continue.

+0

setTimeout est le chemin à parcourir! Testé dans IE8 et avec de grands ensembles de données AJAX plus de 5 000 éléments. –

1

J'ai juste blogged about this et de mettre ce que je pense est une solution assez élégante. Alors jetez un oeil. Comme mentionné ci-dessus, ma solution ne fait que diviser les opérations longues en blocs, mais je fournis une classe d'utilitaires sympa pour cela.

+0

votre solution est intéressante. Je ne l'ai pas essayé mais si ça marche, c'est extrêmement utile. – liammclennan

0

peut aussi considérer diviser la longue opération en $ (document) .ready() et $ (fenêtre) .load()

0

Je viens d'avoir un problème avec sélecteurs jquery qui étaient trop généraux: par exemple $("*")

2

Problème: « Arrêtez de lancer ce script? » Erreur

Solution: Vous pouvez dire un problème de compatibilité ou d'un bug la même chose fonctionne sans erreur dans Mozilla mais il fonctionne dans IE 6,7 ou 8 avec un message d'erreur "Arrêtez l'exécution de ce script". Microsoft a fourni un correctif pour résoudre ce problème dans IE. Alors, s'il vous plaît consulter le lien suivant et télécharger le « Microsoft Fix It » et installer le même et redémarrez le navigateur et vous ne verrez jamais l'erreur « Arrête l'exécution de ce script »: http://support.microsoft.com/kb/175500#FixItForMeAlways

+5

Ce n'est pas vraiment une solution. Les utilisateurs ne devraient pas avoir à installer un correctif juste pour voir un certain site Web dans leur navigateur. Quelques appels 'setTimeout' suffisent pour résoudre ce problème. Les utilisateurs ne devraient pas avoir à installer de correctifs pour corriger le code des développeurs Web (pas d'offense aux développeurs web). –

0

Comme la personne qui a mentionné $ ("*"), essayez de ne pas utiliser $ (this) comme un sélecteur de liens pour les événements personnalisés, ce qui a causé un de mes scripts récents de détruire les temps de chargement du système.

Questions connexes