我正在开发一个使用TinyMCE编辑器的应用程序,允许用户修改内容。我开发了一个Prototype.js类,在初始化时,它会生成一个唯一的ID,并在具有该ID的<div>
上创建一个TinyMCE编辑器。以下是一些相关代码:
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
的{{1}},例如,当TinyMCE编辑器中发生事件时(例如,选择更改),我的处理程序将被赋予编辑器的ID。我会经常这样做:
uid()
查找反映事件发生在界面的实际var index = Region.instances.invoke('uid').indexOf(uid);
实例。
我只设置过任何给定Region
的{{1}}属性。我很确定。
但是在Firefox 9.0.1中,我看到了非常奇怪的行为。当事件触发时,无法找到他们正在触发的编辑器,因为上面代码中的_uid
为Region
。在Firebug中检查后,我看到了:
这些是来自我的代码的调试消息,记录了各种事物(在这种情况下是区域的高度)以及区域的index
值。 内存似乎已损坏!,您甚至可以看到它发生的位置,第一个带圆圈的日志条目是正确的,后续的日志条目是错误的。
相同的代码在Safari和Chrome中运行良好。到目前为止,只有Firefox 9.0.1似乎受到影响......
为了进一步检查,我在Firebug控制台中运行了它:
-1
这对我没有意义。什么可能导致JavaScript中的内存损坏?我该如何解决这种情况呢?
答案 0 :(得分:1)
您的某个文件是否可能使用不同的编码保存?我会看一下,也可能确保你使用正确的编码和mime类型提供文件。
在生成console.log()
uid
值时,进行一些测试可能是个好主意,以确认在创建对象后实际发生了损坏。我怀疑它们是在创建时发生的。