Я разрабатываю приложение, которое использует редакторы TinyMCE, чтобы позволить пользователю изменять контент. Я разработал класс Prototype.js, который после инициализации генерирует уникальный идентификатор и создает редактор TinyMCE на <div>
с этим идентификатором. Вот некоторые из соответствующих кода:
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;
},
Во многих местах я буду ссылаться на Region
uid()
, например, когда события происходят в редакторе TinyMCE (например, изменения выбора), моим обработчикам присваивается идентификатор редактора. Я часто буду делать:
var index = Region.instances.invoke('uid').indexOf(uid);
Чтобы найти фактический экземпляр Region
, отражающий интерфейс, события произошли.
Я только когда-либо устанавливал свойство _uid
для любого заданного Region
раза. Я уверен в этом.
Но в Firefox 9.0.1 я вижу действительно странное поведение. Когда события срабатывают, редактор, который они запускают, не может быть найден, потому что index
в коде выше -1
. После осмотра в Firebug я увидел это:
Это отладочные сообщения из моего кода, записывающие различные вещи (высота регионов в этом случае) вместе с областью this.uid()
. Похоже, что память испорчена!, и вы даже можете увидеть, где это происходит, первая запись журнала в круге верна, а последующие неверны.
Тот же код отлично работает в Safari и Chrome. Пока что влияет только на Firefox 9.0.1...
Чтобы дополнительно проверить, я запустил это в консоли Firebug:
>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid');
["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"]
Это не имеет никакого смысла для меня. Что может привести к повреждению памяти в JavaScript? Как мне даже решить проблему с такой ситуацией?