Ошибка IE Javascript "объект не поддерживает это свойство или метод" в jQuery

по какой-то причине я получаю следующую ошибку Javascript в Internet Explorer 8 в строке 3156 jquery.js (версия 1.4.3, несжатая версия): Object doesn't support this property or method. В Firefox и Google Chrome ошибка не возникает.

это строка, на которой происходит ошибка:

if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

следствия (console.log(Expr.leftMatch[type])) дает следующий интересный результат: в Google Chrome он выводит

/(^(?:.|r|n)*?):((?:[wu00c0-uFFFF-]|.)+)(?:((['"]?)((?:([^)]+)|[^()]*)+)))?(?![^[]*])(?![^(]*))/

однако в Internet Explorer это вывод:

function() {
  var p = this;
  do p = p.previousSibling;
  while (p && p.nodeType != 1);
  return p;
}

на котором exec не может быть вызван (он не определен). Функция quoted отсутствует в jquery.js. Кто-нибудь знает, почему это происходит, или что я могу сделать, чтобы решить эту проблему?

Я, к сожалению, еще не смог создать простой скрипт для воспроизведения проблемы, хотя я нашел этот пост кого-то такая же проблема, но он не предлагает решения (последнее сообщение предполагает, что страница должна быть запущена в Стандартный режим, но мой уже есть).

4 ответов


как оказалось, мне удалось выяснить это самостоятельно после нескольких болезненных часов. Похоже, что механизм селектора Sizzle ломается таким неожиданным образом (и только в Internet Explorer), Если вы определили Object.prototype.previousObject в другом месте.

удаление этой декларации или переименование previousObject к чему-то еще исправляет проблему.

самое смешное, что я даже поставил этот код там сам (Object.prototype.previousObject = [the function in my question]), но я не узнаю код.

Ну, это другой день полный потенциал развития растрачен впустую.


(к сожалению, моя репутация такова, что я не могу прокомментировать непосредственно решение выше)

Я обнаружил, что такое же поведение происходит, если вы пытаетесь добавить метод под названием "унаследованный" к объекту.прототип, то есть Object.prototype.inherited = <some func>

это влияет на IE6, 7 & 8, но, похоже, исправлено в IE9 (beta)


FYI, мы также получили ту же проблему, когда мы переопределили Object.prototype.keys.


какую версию IE вы используете?

вы случайно не работаете в режиме совместимости? Если вы тестируете в локальном домене, по умолчанию IE устанавливает режим совместимости, и ive испытывал случайные проблемы wierd, подобные этому.

Если вы используете IE 8, вы можете попробовать изменить режим браузера в инструментах разработчика (f12), чтобы увидеть, сохраняется ли проблема.