2011-10-21 2 views
0

Mon code ressemble:Prototype.js Element.update() renvoie une erreur sur IE9

var node = parent.insertRow(before); 
node = $(node); 
node.update('<td>Hello</td><td>Hello</td><td>Hello</td>'); 

Il fonctionne sur IE6, IE7, IE8, Chrome, Firefox, Safari (Mac et Windows), mais pas IE9 .

IE9 lève une "exception DOM: INVALID_CHARACTER_ERR (5)" et pointe au milieu de prototype.js à e.setAttribute (c, f). J'ai utilisé la fenêtre de la montre qui affiche c comme "{}", ce qui n'a aucun sens pour moi. J'utilise Scriptaculous 1.9.0 qui inclut le prototype 1.7 que toute la recherche montre comme compatible IE9.

Je sais que IE a des exigences particulières pour les tables, c'est pourquoi j'utilise a Element#update.

Qu'est-ce que je fais mal?

Répondre

0

Si des méthodes sont ajoutées à Object.prototype, elles peuvent devoir être rendues indisponibles en utilisant defineProperty pour Element # update pour fonctionner sur IE9. La mise à jour de l'élément # est fragile lorsque le code modifie Object.prototype.

Dans mon cas, une bibliothèque a fait quelque chose comme ceci:

Object.prototype.aFunc = function() { 
    return doStuff(); 
}; 

I IE9 spécial tubé pour le fixer comme ceci:

if (navigator.userAgent.indexOf("Trident/5") > -1) { 
    Object.defineProperty(Object.prototype, 'aFunc', { 
     value : function() { 
     return doStuff(); 
     }, 
     enumerable : false 
    }); 
} else { 
    Object.prototype.aFunc = function() { 
     return doStuff(); 
    }; 
}