18.12.2010, 17:40
|
|
Новичок на форуме
|
|
Регистрация: 18.12.2010
Сообщений: 6
|
|
Как получить доступ к переменным класса в IE?
Здравствуйте. У меня стоит задача получить доступ к переменным на странице, а точнее к переменным класса. Для этого я перебираю циклом for...in все свойства объекта window:
var classA = function(){
}
var a = new classA();
var b = new classA();
var z = new Date();
for (var k in window) {
if (typeof (window[k]) == "object" && window[k] instanceof classA) { // Здесь IE выдает ошибку
alert('Variable ' + k + ' is a classA');
}
}
В опере и хроме скрипт отрабатывает правильно, находит переменные a и b. Чего не скажешь про IE, который просто выдает ошибку в строке 9: "предполагается наличие объекта". Получается, что IE попросту не видит эти переменные в цикле. При этом мне нужно, чтобы скрипт работал именно под IE.
В чем может быть проблема?
Последний раз редактировалось unbreaker88, 18.12.2010 в 17:44.
|
|
18.12.2010, 23:08
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Это особенность IE, ничего не поделать. Используйте массивы/объекты.
|
|
18.12.2010, 23:56
|
|
Новичок на форуме
|
|
Регистрация: 18.12.2010
Сообщений: 6
|
|
Сообщение от Kolyaj
|
Это особенность IE, ничего не поделать. Используйте массивы/объекты.
|
а каким образом использовать массивы? обьясните пожалуйста подробнее. Дело в том, что у меня нет никакой информации о созданных объектах, кроме имени класса.
Последний раз редактировалось unbreaker88, 18.12.2010 в 23:59.
|
|
19.12.2010, 07:49
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
А зачем вообще что-либо пихать в глобальную область видимости?
А чтобы понять, что вам делать, нужно узнать, зачем вам это.
|
|
19.12.2010, 11:48
|
|
Новичок на форуме
|
|
Регистрация: 18.12.2010
Сообщений: 6
|
|
Сообщение от Kolyaj
|
А зачем вообще что-либо пихать в глобальную область видимости?
А чтобы понять, что вам делать, нужно узнать, зачем вам это.
|
В общем мне нужно внедрить кусок скрипта в страницу, которая уже содержит скрипт с объявленными переменными (скрипт генерится системой автоматически). В моем скрипте я должен получить доступ к этим переменным для последующей работы с ними. Все, что я знаю о сгенерированных переменых - то, что они есть, и имя класса, которому они пренадлежат. Вся проблема заключается в том, что система работает только под IE.
|
|
19.12.2010, 17:47
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
все еще хуже, for( var k in window ) не видит глобальные переменные... а каким образом твой скрипт внедряется в страницу?
|
|
19.12.2010, 19:32
|
|
Новичок на форуме
|
|
Регистрация: 18.12.2010
Сообщений: 6
|
|
Сообщение от x-yuri
|
все еще хуже, for( var k in window ) не видит глобальные переменные... а каким образом твой скрипт внедряется в страницу?
|
Там система специфическая. Cognos 8, если встречался с таким. Там с помощью пользовательского интерфейса можно добавлять куски джаваскрипта, которые затем выполняются при запуске наряду со скриптом, сгенерированным системой автоматически (в нем же и создаются объекты, к которым я и хочу получить доступ с внедренного скрипта).
Последний раз редактировалось unbreaker88, 19.12.2010 в 19:37.
|
|
19.12.2010, 21:03
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
а нельзя конструктор переопределить, чтобы он следил за созданием объектов? (возможно, реализацию нужно будет подправить)
var oldClassA = classA;
var classA = function(){
if( ! classA._instances )
classA._instances = [];
var o = oldClassA.apply(this, arguments) || this;
classA._instances.push( o );
return o;
}
|
|
19.12.2010, 22:31
|
|
Новичок на форуме
|
|
Регистрация: 18.12.2010
Сообщений: 6
|
|
Сообщение от x-yuri
|
а нельзя конструктор переопределить, чтобы он следил за созданием объектов? (возможно, реализацию нужно будет подправить)
var oldClassA = classA;
var classA = function(){
if( ! classA._instances )
classA._instances = [];
var o = oldClassA.apply(this, arguments) || this;
classA._instances.push( o );
return o;
}
|
Переопределить конструктор возможно, но я уже нашел другое решение, всем спасибо за помощь!
|
|
19.12.2010, 23:06
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от unbreaker88
|
но я уже нашел другое решение
|
так расскажи, может кому пригодится
|
|
|
|