IE JavaScript ошибка "Объект не поддерживает это свойство или метод" в JQuery - PullRequest
7 голосов
/ 19 октября 2010

По некоторым причинам я получаю следующую ошибку 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)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 19 октября 2010

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

Удаление этого объявления или переименование previousObject во что-то еще устраняет проблему.

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

Что ж, это еще один день, полный потраченного впустую потенциала разработки.

3 голосов
/ 06 декабря 2010

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

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

...