Ошибка Javascript в IE8: не реализована

Это действительно меня озадачивает, так как код выглядит совершенно безвредным.

IE8 останавливает выполнение script с сообщением:

Не реализовано. map.js line: 66 char: 5

Вот фрагмент кода:

63 if(data.map[x] !== undefined && data.map[x][y] !== undefined) {
64              
65   left = (x - data.dim.x_min)*32 + 30;
66   top = (data.dim.y_max - y)*32 + 30;
67
68  /* do stuff */
XX }

информация об отладке: x: 263 data.dim.x_min: 263 y: 172 data.dim.y_max: 174

Данные - это объект, возвращаемый из вызова JQuery Ajax. Это работает в Firefox 3.0 и 3.5, Safari 4.0.2, и я нашел эту ошибку только при просмотре страницы в IE8. Принуждение IE8 в режим IE7 не приводит к ошибке.

У меня нет IE7 для отладки, но у меня есть тестер, который говорит, что он тоже не работает в IE7.

Ответ 1

Переменная 'top', используемая в коде, является объектом типа DispHTMLWindow2 (внешний объект окна) и уже используется браузерами и вызывает конфликт, поскольку этот объект не может быть объектом операции присваивания. Похоже, что Firefox и Safari игнорируют это, в то время как IE не позволяет перезаписывать сценарии.

Решения для этого:

1) Объявите вершину, которую вы используете как локальную переменную, чтобы определить ее область, в которой она используется.

2) Переименуйте переменную на то, что не противоречит этому предопределенному глобальному.

Описание других имен переменных, которые вы не должны использовать

Ответ 2

В IE 8 есть отличный отладчик javascript. Возможно, вы захотите добавить точку останова где-то перед ошибкой и выполнить код, чтобы увидеть, что странно с данными. IE8 является придирчивым с концевыми запятыми в списках, поэтому может возникнуть ошибка. Вы можете вытащить отладчик с помощью F12, нажмите Script и выберите начало отладки. Вы можете добавить точку останова, щелкнув по краю, где указаны номера строк.