web-dev-qa-db-fra.com

"SCRIPT28: espace de pile insuffisant" sur le site Web à l'aide d'IE9

J'ai un problème où tous les contrôles de bouton de lien sur ma page ne fonctionnent pas une fois que nous déployons notre site Web sur notre serveur de production. Voici quelques détails:

  1. Nous avons 3 environnements sur lesquels nous développons: Notre machine locale, qui utilise IIS7 local pour fonctionner pour le développement; environnement de test qui est un serveur Web réel derrière notre pare-feu (IIS6); Production qui est notre serveur Web en direct (IIS6). Le site Web fonctionne bien sur les machines locales et le serveur de test, mais une fois que nous avons cliqué sur un bouton de lien sur le serveur de production, il se bloque.

  2. Le problème n'existe pas dans Chrome ou FireFox, il n'existe que dans IE9. Il n'existe pas lorsque vous mettez IE9 en mode de compatibilité.

  3. Si j'utilise la barre d'outils du développeur IE9 et regarde les scripts, dès que vous cliquez sur l'un des boutons de lien, la console affiche cette erreur:

SCRIPT28: Espace de pile insuffisant, ligne 340 caractère 9

  1. J'utilise pas mal de JQuery et je me demande si cela cause un problème: Cependant, je ne vois aucune erreur javascript.

Des pensées? Merci pour toutes suggestions.

24
MissioDei

Comme les gens l'ont dit dans les commentaires: cela signifie qu'une récurrence infinie a lieu. Qu'il s'agisse d'une simple récursivité ou d'un chemin sournois dans le code comme un serpent qui se mord la queue - inconnu, il semble IE ne donne aucune trace de pile, ou le fait-il?

9
dmitry

J'ai reproduit ce problème lorsque je fais le code suivant:

HTML

<span class="search-icon"><input title="search" type="submit" value=""></span>

JS

(function($) {
    $('.search-icon').on('click', function(e) {
        // The click event will call  $('.search-icon').on('click', function(e) { .. } for every time
        // which make an infinte loop in click event as long as there are no stop condition added here.
        $(this).find('input').click();
    });
})(jQuery);

J'ai résolu ce problème en changeant mon code JS pour qu'il soit:

(function($) {
        $('.search-icon').on('click', function(e) {
            $(this).closest('form').submit();
        });
})(jQuery);

J'espère que cette réponse vous sera utile.

2
Ahmad AlMughrabi

Pouvez-vous publier le code/un lien vers le code ou résoudre ce problème?

Problèmes courants: vous pouvez avoir un problème de fermeture dans le html, donc différents navigateurs interprètent différemment la hiérarchie html, ou vous pouvez parcourir un for (x en y) où x contient une référence arrière à y.

1
ledlogic

Consultez la page msdn pour plus d'informations sur cette erreur. Dans mon cas, l'erreur a été causée par:

Votre code a déclenché une cascade d'événements.
Une cascade d'événements est provoquée par le déclenchement d'un événement qui appelle une procédure événementielle qui est déjà sur la pile. ...

Fondamentalement, j'essayais de déclencher un événement de clic (en utilisant jQuery) sur un contrôle de téléchargement de fichier en utilisant l'événement de clic du contrôle . On dirait que cela provoquerait une récursion infinie. Peut-être que vous rencontrez des problèmes similaires avec vos boutons.

1
Nick Rolando