2012-10-17 29 views
5

Trên kịch bản dưới đây, IE9 là ném một lỗi:IE9 ném DOM Ngoại lệ: INVALID_CHARACTER_ERR (5)

SCRIPT5022: DOM Ngoại lệ: INVALID_CHARACTER_ERR (5) mootools-1.2.1-core-yc.js, dòng 118 ký tự 1

Document.implement({ 
    newElement: function (A, B) { 
     if (Browser.Engine.trident && B) { 
      ["name", "type", "checked"].each(function (C) { 
       if (!B[C]) { 
        return; 
       } 
       A += " " + C + '="' + B[C] + '"'; 
       if (C != "checked") { 
        delete B[C]; 
       } 
      }); 
      A = "<" + A + ">"; 
     } 
     return $.element(this.createElement(A)).set(B); //THIS IS LINE 118 
    }, 
    newTextNode: function (A) { 
     return this.createTextNode(A); 
    }, 
    getDocument: function() { 
     return this; 
    }, 
    getWindow: function() { 
     return this.window; 
    } 
}); 

Đoạn mã này là một phần của thư viện Mootools js mà nhà phát triển sử dụng trên trang web. Có cách khắc phục nào để sửa lỗi cho IE không?

+1

kiểm tra cập nhật của tôi vào câu trả lời của tôi, tôi nghĩ bạn chỉ cần cập nhật tập lệnh mootools lên 1.2.5 hoặc cao hơn (bạn đang sử dụng 1.2.1) – ckozl

Trả lời

9

yeah mã đó là rác, bạn không bao giờ nên làm kiểm tra trình duyệt như vậy, nó được dạy trong JavaScript 101 ... lol không thể tin rằng đó là trong mootools? blech, anyways

IE9 không cho phép document.createElement('<div style="background:red">yay!</div>'); cú pháp điên nữa (không có ai nên đã bao giờ thực sự được sử dụng nó ở nơi đầu tiên ...)

đây là một ví dụ:

var d = document; 
var x = d.createElement('div'); 

x.innerHTML = 'yay'; 
x.style.backgroundColor = 'red'; 
x.style.padding = '6px'; 
x.style.margin = '20px'; 

d.body.appendChild(x); 

var sameHTML = '<div style="background:green;padding:6px;margin:20px;">yay!</div>'; 

// fails in IE > 8 and other browsers 
try { 
    var y = d.createElement(sameHTML); 
    d.body.appendChild(y); 
} catch (err) { 
    d.body.appendChild(d.createTextNode(err)); 
} 

// quick fix using innerHTML: 
var temp = d.createElement('div'); 
temp.innerHTML = sameHTML; 
d.body.appendChild(temp.childNodes[0]); 

cách để khắc phục điều này là tạo phần tử giả và sử dụng .innerHTML và sau đó giải nén trẻ hoặc bên trong mootools kiểm tra phiên bản trình duyệt và không làm điều đó cho IE > 8 nếu tôi nhớ mootools phù hợp có một Browser.Engine.version hoặc ...

chỉnh sửa: tôi cảm thấy như tôi cũng nên thêm rằng điều này: Browser.Engine.trident là kiểm tra có vấn đề, và từ gò ... Đọc thêm

aha! khác update: tôi tìm thấy điều này trong khi tìm kiếm thông qua [một tuổi] hỗ trợ chủ đề:

you'll need to update to 1.2.5 or 1.3. Previous MooTools versions are not supported by IE9.

nên một bản cập nhật để kịch bản nên khắc phục vấn đề của bạn, hy vọng nó sẽ không giới thiệu nhiều lỗi ... bạn có thể nhận được nó ở đây: http://mootools.net/download, bạn có thể muốn thử rằng phiên bản 1.2.5 ở phía trên cùng của trang vì nó sẽ có số tiền ít nhất của thay đổi ...

may mắn -ck