Prototype.js Element.update () выдает ошибку в IE9 - PullRequest
0 голосов
/ 22 октября 2011

Мой код выглядит так:

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

Он работает на IE6, IE7, IE8, Chrome, Firefox, Safari (как на Mac, так и на Windows), но не на IE9.

IE9 выбрасывает«DOM Exception: INVALID_CHARACTER_ERR (5)» и указывает в середине файла prototype.js на e.setAttribute (c, f).Я использовал окно просмотра, которое показывает c как "{}", что не имеет никакого смысла для меня.

Я использую Scriptaculous 1.9.0, который включает в себя Prototype 1.7, который все исследования показывают как совместимый с IE9.

Я знаю, что IE предъявляет особые требования к таблицам, поэтому я использую Элемент # update .

Что я делаю не так?

1 Ответ

0 голосов
/ 25 октября 2011

Если методы добавлены в Object.prototype, их, возможно, придется сделать не перечисляемым, используя defineProperty для Element # update для работы в IE9.Элемент # update является хрупким, когда код изменяет Object.prototype.

В моем случае библиотека сделала что-то вроде этого:

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

Я специально создал IE9, чтобы исправить это так:

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