Странное поведение JavaScript в FireFox
Есть вот такая функция, в каччестве входного параметра ей передается имя изображения (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
Что делать - ума не приложу!
Буду рад совету!