Программирование > JavaScript & JScript
Проверка на броузер(из FAQ\'а)
(1/1)
yaroslaw:
Такой вопрос: взял из FAQ функцию определения броузера. проблема вот в чем: когда я определяю
function Is(){
....blah-blah-blah...
}
function somefunc(){
is=new Is();
}
is2=new Is();
то is2 нормально работает, а is -- нет. Говорит (нетскейп) что Is() is not defined. Очень похоже на то что Is() есть локальной и поэтому не видна в somefunc(). Как побороть? (обьявить глобальной, etc)
puh:
Должно быть вы функции разнесли в разные . А они должны быть вместе. Или, по крайней мере, Is() раньше чем все ее последующие вызовы.
А, минуточку, что значит is2=new Is(); - так вы определяете новую функцию. Уберите new и все будет в порядке.
yaroslaw:
Все оно в одном . И функция Is() самая что ни на есть первая. И взята целиком вместе с примером использования из FAQ данного форума. И проблема в том что там где is2 -- все работает, а там где is -- нет. То есть я бы, как програмист на С, сказал что тут Is() обьявлена локальной и поэтому ее внутри другой функции не видно. К сожалению у меня не хватает знаний в области JS чтобы с такой увереностью о ней рассуждать.
Макс:
yaroslaw
Только что проверил под IE5, Opera5, NN4.5 NN6
Ошибок не выдал ни один броузер.
--- Код: ---
function Is() {
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion);
this.minor = parseFloat(navigator.appVersion);
this.ns = ((agent.indexOf(\'mozilla\')!=-1) && ((agent.indexOf(\'spoofer\')==-1) && (agent.indexOf(\'compatible\') == -1)));
this.ns2 = (this.ns && (this.major == 2));
this.ns3 = (this.ns && (this.major == 3));
this.ns4b = (this.ns && (this.minor < 4.04));
this.ns4 = (this.ns && (this.major >= 4));
this.ie = (agent.indexOf("msie") != -1);
this.ie3 = (this.ie && (this.major == 2));
this.ie4 = (this.ie && (this.major >= 4));
this.op3 = (agent.indexOf("opera") != -1);
this.win = (agent.indexOf("win")!=-1);
this.mac = (agent.indexOf("mac")!=-1);
this.unix = (agent.indexOf("x11")!=-1);
}
function somefunc(){
is=new Is();
if (is.ie) { alert(\'ie\');}
if (is.ns4) { alert(\'ns\');}
if (is.op3) { alert(\'opera\');}
}
// может ты забыл про этот вызов функции
somefunc();
is2=new Is();
if (is.ns) {alert(\'a\');}
--- Конец кода ---
yaroslaw:
Всем спасибо. Оказалось другая ошибка провоцировала эту:/
Навигация
Перейти к полной версии