2010-10-11 2 views
16

Je faisais des tests croisés sur certains éléments de fonctionnalité aujourd'hui, et j'ai croisé un petit bijou plutôt astucieux.IE6/7/8 Mémoire insuffisante?

En IE8: Out of memory at line: 99

Dans IE7: Out of memory at line: 100

En IE6: Stack overflow at line: 101

D'après ce que j'ai pu creuser, la plupart du temps, ces messages commencent à apparaître, il est un problème avec avoir un tableau dans lequel le nombre d'éléments est supérieur à 65,535. Cependant, je ne crois pas que ce soit la question ici.

La fonctionnalité en question est une action de iframe "fermant" le iframe actuel et "ouvrant" un autre utilisant jQuery. Cela se passe réellement sur l'interaction étroite/ouverte.

Est-ce que quelqu'un a déjà vu quelque chose comme ça?

Édition: Après un examen plus approfondi, cela ne semble pas être lié aux iframes. Toujours en train de creuser, mais toutes suggestions seraient appréciées.

+0

Quels autres navigateurs avez-vous testés et quelle quantité d'éléments ajoutez-vous? – RobertPitt

+0

Fonctionne bien dans Linux Chrome et FF3.6 et Windows FF3.6. –

+0

Les débordements de pile sont généralement dus à une récursivité illimitée. Êtes-vous sûr qu'il n'y a rien de tout cela dans votre code? – bzlm

Répondre

11

Donc, il s'est avéré être un problème avec IE et tout le reste gérer les choses différemment ... comme d'habitude.

J'ai une fonction que j'utilise pour lancer une erreur, et elle est récursive par conception. Je voulais que l'erreur soit affichée dans le document principal, pas un iframe (qui est utilisé intensivement sur ce site, malheureusement). L'essentiel de ma fonction est la suivante:

myClass.myErrorFunc = function (msg) { 
    if (parent !== window) { 
     parent.myClass.myErrorFunc(msg); 
    } else { 
     // display the error 
    } 
} 

Cela fonctionne très bien dans Chrome et Firefox. Il récursente un niveau et fait l'erreur d'affichage dans la fenêtre principale car une fois qu'il atteint le niveau supérieur, le parent est lui-même. Apparemment dans IE, cependant, le parent de la fenêtre est JAMAIS lui-même. Ainsi, la récursion infinie.

Restez à l'écoute pour trouver une solution.

Édition: Apparemment, l'utilisation de !== au lieu de != a posé un problème. Quand je suis passé à !=, la deuxième fois par (comme cela est en cours d'exécution d'un iframe), window == parent évalue vrai, mais window === parent ne ...

Quoiqu'il en soit, je vais le prendre ...

Merci pour votre aide les gars.

0

Il semblerait que vous preniez trop de mémoire avec quelque chose et IE n'a pas beaucoup de mémoire allouée pour ce genre de chose :) D'autres navigateurs le font. Si vous jetez un oeil à ces numéros de ligne que vous avez ou déboguer votre code avec les outils de développement IE8, vous devriez obtenir votre réponse.

S'il ne s'agit pas d'une récursivité, il peut s'agir d'une boucle qui continue de manger plus de mémoire jusqu'à épuisement.

Questions connexes