2011-01-08 5 views
3

я сузил свою ошибку следующего набора кодов, производящие различное поведение в Google Chrome:Различное поведение объекта JavaScript в объекте FireFox и Google Chrome?

Пример код: http://jnvxxx.appspot.com/rpc/static_server?key_=testjs.html

Firefox Выход: Привет 1 [объект Object] 192 Привет 2

Chrome Выход : Привет 1 [object Object] undefined Привет 2

Любая идея горячая, чтобы получить атрибуты, работающие в Google Chrome.

Спасибо.

+0

Вы не используете JSON нигде, просто литералы объектов JavaScript. –

+0

@Matthew, Извините. На самом деле, я получаю этот javascript-литерал от json.dumps (объект python). Вот почему я положил JSON на поиски ошибок в 1-м месте. – ramu

ответ

5

Вы получаете доступ к свойству window.status, которое используется для управления текстом в строке состояния. См.: http://www.w3schools.com/jsref/prop_win_status.asp.

Очевидно, эта функция должна быть включена во всех основных браузерах, поэтому, по-видимому, разные браузеры делают разные вещи, когда выключены. Chrome изменяет значение свойства status на string, поэтому он становится загадочной, но знакомой строкой "[object Object]", которая не имеет свойства entry_count. Firefox оставляет объект неповрежденным в свойстве status.

Итог: window.status уже используется для чего-то еще; используйте другое имя для своей переменной.

EDIT:

Как упомянуто ниже, еще лучший способ сделать все это сделать будет инкапсулировать его в области видимости функции, до тех пор, пока вы не собираетесь использовать его в других местах, так или иначе:

(function() { 
    var myStatus = {...}; 
    // Do something with myStatus, preferably not document.write ;) 
}()); 

var a = typeof myStatus; // a === 'undefined'. 

Таким образом, переменная будет видна только в пределах области действия.

+0

Спасибо Speny ... Я поражен :) Работающий сейчас: Образец: http://jnvxxx.appspot.com/rpc/static_server?key_=testjs2.html – ramu

+1

+1 Хорошее знание, сэр! В качестве дополнительной заметки, это то, что происходит, когда вы используете глобальные переменные. Вместо того, чтобы просто использовать другое имя переменной, было бы хорошим решением добавить новую область, даже если это просто автономная анонимная функция. – lonesomeday

+0

@lonesomeday Правильно! Я добавил его в качестве бонуса. –

Смежные вопросы