2010-10-11 17 views
16

Stavo facendo alcuni test cross-browser su alcune funzionalità oggi e ho trovato una piccola gemma piuttosto elegante.IE6/7/8 Memoria insufficiente?

In IE8: Out of memory at line: 99

In IE7: Out of memory at line: 100

In IE6: Stack overflow at line: 101

Da quello che sono riuscito a scavare, il più delle volte questi messaggi iniziano ad apparire, si tratta di un problema con avere una matrice in cui il numero di elementi è maggiore di 65,535. Tuttavia, non credo che questo sia il problema a portata di mano qui.

La funzionalità in questione è un'azione all'interno di un iframe "chiusura" dell'attuale iframe e "apertura" di un altro utilizzando jQuery. Sta realmente accadendo nell'interazione vicino/aperto.

Qualcuno ha mai visto qualcosa di simile?

Modifica: Su ulteriori indagini, in realtà non sembra essere correlato agli iframe. Sto ancora scavando, ma ogni suggerimento sarebbe apprezzato.

+0

quali altri browser hai testato e quale quantità di elementi stai aggiungendo? – RobertPitt

+0

Funziona bene con Linux Chrome e FF3.6 e Windows FF3.6. –

+0

Gli overflow dello stack sono * di solito * a causa di una ricorsione illimitata. Sei sicuro che non ci sia nulla del tuo codice? – bzlm

risposta

11

Quindi si è verificato un problema con IE e tutto il resto gestisce le cose in modo diverso ... come al solito.

Ho una funzione che sto usando per lanciare un errore, ed è ricorsiva in base alla progettazione. Volevo che l'errore fosse visualizzato nel Documento principale, non in un iframe (che viene utilizzato ampiamente su questo sito, sfortunatamente). Il succo della mia funzione è il seguente:

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

Questo funziona GRANDE in Chrome e Firefox. Ricorre di un livello e visualizza l'errore nella finestra principale, perché una volta raggiunto il livello superiore, il genitore è esso stesso. Apparentemente in IE, tuttavia, il genitore di una finestra non è MAI in sé. Quindi, ricorsione infinita.

Restate sintonizzati per una soluzione.

Modifica: Apparentemente, si è verificato un problema con l'utilizzo di !== anziché !=. Quando sono passato al !=, la seconda volta attraverso (come questo viene eseguito da un iframe), window == parent valutata vera, ma non lo fa window === parent ...

Qualunque cosa, la prendo ...

Grazie per il vostro aiuto ragazzi.

0

Sembrerebbe che tu abbia troppa memoria con qualcosa e IE non abbia così tanta memoria allocata per quel tipo di qualcosa :) Altri browser lo fanno. Se dai un'occhiata ai numeri di linea che hai o esegui il debug del tuo codice con gli strumenti di sviluppo di IE8 dovresti ottenere la risposta.

Se non si tratta di una ricorsione, potrebbe trattarsi di un ciclo che continua a consumare più memoria finché non si esaurisce.

Problemi correlati