2012-10-17 26 views
5

Na poniższym skrypcie IE9 jest rzucanie błąd:IE9 rzuca DOM wyjątek: INVALID_CHARACTER_ERR (5)

SCRIPT5022: DOM Wyjątek: INVALID_CHARACTER_ERR (5) mootools-1.2.1-core-yc.js, liniowy 118 znaków 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; 
    } 
}); 

Ten fragment jest częścią biblioteki Mootools js, którą programista użył na stronie. Czy istnieje sposób rozwiązania tego problemu dla IE?

+1

sprawdź mój aktualizacji do mojej odpowiedzi, Myślę, że wystarczy zaktualizować skrypt mootools do wersji 1.2.5 lub wyższej (używasz 1.2.1) – ckozl

Odpowiedz

9

Tak, ten kod jest śmieciem, nigdy nie powinieneś robić takich przeglądarek, jego nauczanie w JavaScript 101 ... lol nie może uwierzyć, że jest w mootools? Blech, jakikolwiek

IE9 nie pozwala na szaloną składni document.createElement('<div style="background:red">yay!</div>'); już (nikt nie powinien kiedykolwiek naprawdę używam go na pierwszym miejscu ...)

oto przykład:

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]); 

sposobem na naprawienie tego jest utworzenie elementu dummy i użycie .innerHTML, a następnie wyodrębnienie elementu potomnego lub wewnątrz mootools sprawdzenia wersji przeglądarki i nie rób tego dla IE > 8, jeśli pamiętam, że prawidłowe mootools ma Browser.Engine.version lub coś podobnego do tego ...

edit: czuję, że należy również dodać, że w ten sposób: Browser.Engine.trident jest problematyczny check iz gyst kodu wygląda to może nastąpić gdzie indziej zbyt ...

aha! kolejna zmiana: Znalazłem to patrząc przez [starej] Gwint wsparcia:

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

więc aktualizacja do skryptu powinno rozwiązać problem, mam nadzieję, że nie wprowadzi więcej błędów ... można je dostać tutaj: http://mootools.net/download, może chcesz spróbować tej wersji 1.2.5 w górnej części strony, ponieważ będzie miał najmniejszą ilość zmian ...

powodzenia -ck