2012-01-25 57 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的問題? –