2012-10-17 16 views
5

auf das Skript unten, IE9 einen Fehler wirft INVALID_CHARACTER_ERR (5) mootools-1.2.1-core-yc.js, Zeile 118 Zeichen 1IE9 wirft DOM Ausnahme:</p> <p>SCRIPT5022: DOM Ausnahme: INVALID_CHARACTER_ERR (5)

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

Dieser Ausschnitt ist ein Teil der Mootools js-Bibliothek, die der Entwickler an der Stelle verwendet. Gibt es eine Problemumgehung, um den Fehler für IE zu beheben?

+1

mein Update auf meine Antwort überprüfen, Ich denke, Sie müssen nur das Mootools-Skript auf 1.2.5 oder höher aktualisieren (Sie verwenden 1.2.1) – ckozl

Antwort

9

Ja, dass Code ist Müll, sollten Sie nie Browser überprüft, wie es in JavaScript 101 gelehrt ... lol kann nicht glauben, dass das in Mootools ist? blech, sowieso

IE9 nicht erlaubt für verrückt document.createElement('<div style="background:red">yay!</div>'); Syntax mehr (niemand jemals haben soll wirklich in erster Linie mit ...)

hier ein Beispiel:

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

die Möglichkeit, dies zu beheben, ist entweder ein Dummy-Element zu erstellen und .innerHTML zu verwenden und dann das Kind zu extrahieren, oder innerhalb mootools die Browser-Version überprüfen und tun dies nicht für IE > 8, wenn ich mich erinnere, hat richtige Mootools eine Browser.Engine.version oder etwas zu diesem Zweck ...

edit: Ich fühle mich wie ich auch, dass dies sollte hinzufügen: sieht Browser.Engine.trident ist die problematische Prüfung und vom gyst des Codes wie es sonst auftreten könnte, wo auch ...

aha! ein weiteres Update: ich diese Zeit fand die Suche durch [einen alten] Unterstützung thread:

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

so ein Update für das Skript sollte Ihr Problem beheben, wird es hoffentlich nicht mehr Bugs vorstellen ... Sie können es hier: http://mootools.net/download, möchten Sie vielleicht, dass die Version 1.2.5 am oberen Rand der Seite, um zu versuchen, da es die geringste Menge an Änderungen haben ...

Glück -ck