Я разрабатываю приложение, которое использует редакторы 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? Как мне вообще разобраться с такой ситуацией?