2012-10-17 24 views
5

Sul script seguente, IE9 sta gettando un errore:IE9 tiri DOM eccezione: INVALID_CHARACTER_ERR (5)

SCRIPT5022: DOM eccezione: INVALID_CHARACTER_ERR (5) mootools-1.2.1-core-yc.js, linea 118 carattere 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; 
    } 
}); 

Questo frammento fa parte della libreria j di Mootools che lo sviluppatore ha utilizzato sul sito. C'è una soluzione alternativa per correggere l'errore per IE?

+1

controllare il mio aggiornamento per la mia risposta, penso che devi solo aggiornare lo script mootools alla versione 1.2.5 o successiva (stai usando 1.2.1) – ckozl

risposta

9

sì, quel codice è spazzatura, non dovresti mai fare controlli del browser del genere, è insegnato in JavaScript 101 ... lol non posso credere che sia in mootools? BLECH, comunque

IE9 non consente folle document.createElement('<div style="background:red">yay!</div>'); sintassi più (nessuno dovrebbe abbia mai realmente utilizzato in primo luogo ...)

Ecco un esempio:

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

il modo per risolvere questo problema è quello di creare un elemento fittizio e utilizzare .innerHTML e quindi estrarre il figlio oppure all'interno di mootools controllare la versione del browser e non farlo per IE > 8 se ricordo che mootools ha un Browser.Engine.version o qualcosa del genere ...

edit: mi sento come i dovrebbe anche aggiungere che questo: Browser.Engine.trident è il controllo problematico, e dal gyst del codice sembra che potrebbe accadere altrove troppo ...

aha! un altro aggiornamento: Ho trovato questo mentre guardando attraverso [una vecchia] thread di supporto:

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

così un aggiornamento allo script dovrebbe risolvere il problema, speriamo che non introdurrà più bug ... si può ottenere qui: http://mootools.net/download, si potrebbe desiderare di provare che la versione 1.2.5 nella parte superiore della pagina, poiché avrà il minor numero di cambiamenti ...

buona fortuna -CK