2012-01-25 14 views
16

Estoy desarrollando una aplicación que utiliza los editores TinyMCE para permitir al usuario modificar el contenido. Desarrollé una clase Prototype.js que, al inicializarse, genera una ID única y crea un editor TinyMCE en un <div> con esa ID. Esto es parte del código correspondiente:¿Qué podría causar daños en la memoria en JavaScript?

Region = Class.create(
{ 
    initialize: function(options) 
    { 
    this._editorReady = false; 
    this._index = Region.nextIndex++; 
    this._uid = com.digitalfruition.Customizer.TypeRegion.uidPrefix+this._index; 
    Region.instances.push(this); 
    this.setupTinyMCE(); 
    }, 

    uid: function() 
    { 
    return this._uid; 
    }, 

    index: function() 
    { 
    return this._index; 
    }, 

En muchos lugares, me referiré a un Region 's uid(), por ejemplo, cuando se producen eventos en el editor TinyMCE (por ejemplo, los cambios de selección) mis manejadores reciben la ID del editor. A menudo me haré:

var index = Region.instances.invoke('uid').indexOf(uid); 

Para encontrar el real Region ejemplo que refleja la interfaz de los hechos ocurridos en

yo sólo establece la propiedad de cualquier _uid dado Region vez.. Estoy seguro de esto.

Pero en Firefox 9.0.1, estoy viendo un comportamiento realmente extraño. Cuando se desencadenan eventos, no se puede encontrar el editor que están activando porque index en el código anterior es -1. Después de inspeccionar en Firebug, vi esto:

Screen Capture of odd behavior

Esos son los mensajes de depuración de mi código, registrando varias cosas (la altura de las regiones en este caso) junto con el valor this.uid() de la región. ¡Parece que la memoria se ha dañado! e incluso puede ver dónde sucede, la primera entrada de registro en un círculo es correcta y las siguientes son incorrectas.

El mismo código funciona bien en Safari y Chrome. Hasta ahora, sólo Firefox 9.0.1 parece ser afectada ...

Para inspeccionar más, me encontré con esto en la consola de Firebug:

>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid'); 
["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"] 

Eso no tiene sentido para mí. ¿Qué podría causar daños en la memoria como este en JavaScript? ¿Cómo puedo solucionar problemas en una situación así?

+0

Estoy en [el chat de JavaScript] (http://chat.stackoverflow.com/rooms/17/javascript) en caso de que quiera hacerme alguna pregunta. – Josh

+0

¿De dónde viene esta cosa de 'com.digitalfruition.Customizer.TypeRegion', por cierto? ¿Es un objeto de JavaScript puro? – dyoo

+0

@dyoo Lo siento, eso no está claro, ¿verdad? :) Ese es el objeto Region en mi muestra de código; Acabo de acortar el código de mi pregunta. – Josh

Respuesta

1

¿Es posible que uno de sus archivos se guarde con una codificación diferente? Me gustaría ver eso, y también tal vez asegurarme de que está publicando los archivos con la codificación y los tipos de mime correctos.

Podría ser una buena idea hacer algunas pruebas donde console.log() los valores uid ya que se generan para confirmar que la corrupción está ocurriendo después de que se crean los objetos. Sospecho que está sucediendo cuando se crean.

+0

Estoy seguro de que las codificaciones no han cambiado ... ¡bien pensado! – Josh

+1

Además, la corrupción definitivamente ocurre después de que se crean los objetos.Esos mensajes de registro ocurren después de que se crean los objetos e incluso se pueden ver * tres * valores diferentes en la captura de pantalla que mostré. Entonces están cambiando después. – Josh

+0

Hmmm. ¿Has probado en Chrome para confirmar que solo se trata de un problema de Firefox? –

Cuestiones relacionadas