2012-01-25 25 views
16

Tôi đang phát triển một ứng dụng sử dụng trình chỉnh sửa TinyMCE để cho phép người dùng sửa đổi nội dung. Tôi đã phát triển một lớp Prototype.js, khi khởi tạo, tạo ra một ID duy nhất và tạo ra một trình soạn thảo TinyMCE trên một <div> với ID đó. Dưới đây là một số mã có liên quan:Điều gì có thể gây ra tham nhũng bộ nhớ trong 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; 
    }, 

Trong rất nhiều nơi, tôi sẽ đề cập đến một Region 's uid(), ví dụ, khi sự kiện xảy ra trong trình soạn thảo TinyMCE (ví dụ, những thay đổi lựa chọn) xử lý của tôi được cung cấp ID của trình chỉnh sửa. Tôi thường sẽ làm:

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

Để tìm thực tế Region dụ phản ánh giao diện các sự kiện xảy ra trong

tôi chỉ bao giờ thiết lập _uid sở hữu của bất kỳ trao Region lần.. Tôi chắc chắn về điều này.

Nhưng trong Firefox 9.0.1, tôi thấy hành vi thực sự kỳ quặc. Khi sự kiện kích hoạt, trình chỉnh sửa mà họ đang kích hoạt không thể tìm thấy vì index trong mã ở trên là -1. Sau khi kiểm tra trong Firebug, tôi thấy điều này:

Screen Capture of odd behavior

Đó là những thông điệp debug từ mã của tôi, đăng nhập điều khác nhau (chiều cao của khu vực trong trường hợp này) cùng với giá trị this.uid() của khu vực. Bộ nhớ dường như đã bị hỏng! và thậm chí bạn có thể nhìn thấy nơi nó xảy ra, mục nhập nhật ký vòng đầu tiên là chính xác và các mục nhập tiếp theo là sai.

Mã giống nhau hoạt động tốt trong Safari và Chrome. Cho đến nay chỉ có Firefox 9.0.1 dường như bị ảnh hưởng ...

Để kiểm tra thêm, tôi chạy này trong Firebug console:

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

Điều đó làm cho không có ý nghĩa với tôi. Điều gì có thể gây ra tham nhũng bộ nhớ như thế này trong JavaScript? Làm cách nào để tôi khắc phục sự cố như vậy?

+0

Tôi đang ở trong [trò chuyện JavaScript] (http://chat.stackoverflow.com/rooms/17/javascript) trong trường hợp bạn muốn hỏi tôi bất kỳ câu hỏi nào! – Josh

+0

Điều này 'com.digitalfruition.Customizer.TypeRegion' đến từ đâu, bằng cách này? Nó là một đối tượng JavaScript thuần túy? – dyoo

+0

@dyoo Xin lỗi, điều đó không rõ ràng phải không? :) Đó là đối tượng Region trong mẫu mã của tôi; Tôi chỉ rút ngắn mã cho câu hỏi của mình. – Josh

Trả lời

1

Có thể một trong các tệp của bạn được lưu bằng mã hóa khác không? Tôi sẽ xem xét điều đó và cũng có thể đảm bảo rằng bạn đang phân phối các tệp có các loại mã hóa và mime chính xác.

Có thể là một ý tưởng hay khi thực hiện một số thử nghiệm khi bạn giá trị uid khi chúng được tạo ra để xác nhận rằng tham nhũng xảy ra sau khi các đối tượng được tạo. Tôi nghi ngờ nó xảy ra khi chúng được tạo ra.

+0

Tôi tích cực không có mã hóa đã thay đổi ... suy nghĩ tốt mặc dù! – Josh

+1

Ngoài ra, tham nhũng chắc chắn xảy ra sau khi các đối tượng được tạo ra.Những thông điệp tường trình này xuất hiện sau khi các đối tượng được tạo và bạn thậm chí có thể thấy * ba * giá trị khác nhau trong ảnh chụp màn hình mà tôi đã trình bày. Vì vậy, họ đang thay đổi sau đó. – Josh

+0

Hmmm. Bạn đã thử nghiệm trong Chrome để xác nhận rằng đó chỉ là vấn đề với Firefox? –

Các vấn đề liên quan