2012-01-25 55 views
16

我正在开发一个应用程序,它使用TinyMCE编辑器来允许用户修改内容。我开发了一个Prototype.js类,它在初始化时生成一个唯一的ID并使用该ID在<div>上创建一个TinyMCE编辑器。下面是一些相关的代码:什么可能导致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; 
    }, 

在很多地方,我会指Regionuid(),例如,当事件TinyMCE的编辑器内发生(例如,选择更改)我的处理程序给出编辑者的ID。我经常会做的事:

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

要查找实际Region实例反映的事件发生在接口

我只设置任何给定的Region一旦_uid财产。我确信这一点。

但是在Firefox 9.0.1中,我看到了很奇怪的行为。当事件发生时,他们发现的编辑器无法找到,因为上面代码中的index-1。在Firebug检查后​​,我看到了这一点:

Screen Capture of odd behavior

这些都是调试消息从我的代码,与该地区的this.uid()值一起记录各种东西(的地区在这种情况下,高度)。 内存似乎已损坏!,你甚至可以看到它发生的地方,第一个圈出来的日志条目是正确的,而后面的条目是错误的。

相同的代码在Safari和Chrome中正常工作。到目前为止,只有火狐9.0.1似乎受到影响......

为了进一步检查,我在Firebug控制台运行此:

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

这是没有意义的我。什么可能导致这样的JavaScript内存损坏?我怎么去解决这种情况呢?

+0

如果您想问我任何问题,我在[JavaScript聊天](http://chat.stackoverflow.com/rooms/17/javascript)! – Josh

+0

这个'com.digitalfruition.Customizer.TypeRegion'的东西来自哪里,顺便说一下?它是一个纯JavaScript对象吗? – dyoo

+0

@dyoo对不起,那还不清楚,是吗? :)这是我的代码示例中的Region对象;我只是缩短了我的问题的代码。 – Josh

回答

1

是否有可能您的某个文件使用不同的编码进行保存?我会看看,也可能确保你使用正确的编码和MIME类型来提供文件。

当您生成console.log()uid值时,您可能需要进行一些测试,以确认在创建对象之后确实发生了损坏。我怀疑它是在创建时发生的。

+0

我是积极的没有编码已经改变......虽然好想法! – Josh

+1

此外,创建对象后肯定会发生损坏。这些日志消息发生在创建对象后,您甚至可以在我展示的屏幕截图中看到* 3个不同的值。所以他们之后会改变。 – Josh

+0

嗯。您是否在Chrome中测试过,以确认它只是Firefox的问题? –