Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Странное поведение JavaScript в FireFox

4.6K
22 февраля 2005 года
zetter
9 / / 10.10.2003
Вопрос к знатокам программирования на java script:

Есть вот такая функция, в каччестве входного параметра ей передается имя изображения (imgName) и путь к изображению (imgPath).
В первой части происходит создание объекта Image, отрезание первых трех символов из пути (они содержат "../") и присвоение свойству src этого обрезанного пути.
Во второй части происходит вычисление размеров окна браузера, в котором запущен скрипт.
А вот в третьей части на основе свойств нашего объекта Image Width и Height вычисляются размеры видимой области для изображения и далее это все вставляется в элемент div в другой фрейм.


код:
--------------------------------------------------

function setTopFrameImage(imgName, imgPath) {
//0 alert (imgName + " " + imgPath);
//1
var w_doc = 0;
var h = 0;
var w = 0;
var iimg = 0;
iimg = new Image();
var ppath = String (imgPath);
var cut = ppath.substr (3, 50);
iimg.src = cut;
//2
h = top.TopFrame.document.body.clientHeight - 10;
w_doc = top.TopFrame.document.body.clientWidth;

//3a alert (w_doc + " " + h + " " + cut + " " + iimg.width);
//3
w = h * iimg.width / iimg.height;
if (w > w_doc) w = (w_doc - 10);
if (w > iimg.width) w = iimg.width;

alert (w);

var pix = top.TopFrame.document.getElementById("pix");
pix.innerHTML = '';
pix.innerHTML=''
}

--------------------------------------------------

Все работает замечательно в IE, в FireFox, однако, наблюдается странная вещь - при вызове этой функции из одного места программы она отрабатывает на 100%, но при вызове ее же из другого места, причем с теми-же параметрами (!!!) (что подтверждает алерт в строке "0") отказывается функционировать строчка, помеченная как "3а" и часть "3" в плане работы свойств width и height.
То есть Алерт в строке 3а печатает строку вида
835 528 images/image1.jpg 800
в случае, когда все работает и строку
835 528 images/image1.jpg 0
когда не работает.
Естественно, что блок операторов

код:
--------------------------------------------------

w = h * iimg.width / iimg.height;
if (w > w_doc) w = (w_doc - 10);
if (w > iimg.width) w = iimg.width;

--------------------------------------------------

имея нули в качестве значений iimg.width и iimg.height выдает неверный ответ.

Картинка загружена, в кеше уж точно есть, и в памяти наверняка... и в IE все работает...

И к тому же в моем коде есть такая функция:

function preloadMyImages() {
for (var i=0; i < myImagesIndexed.length; i++) {
preloadObj[myImagesIndexed[0]] = newImage("../images/" + myImagesIndexed[0]);
}
allImagesLoaded = true;
}

а в теге <body>:
<body onload ="preloadMyImages();">

и при первом старте выполняется проверка на истинность allImagesLoaded

Что делать - ума не приложу!

Буду рад совету!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог