Уф, разгребся, вроде. Перепробовал кучу способов, так и не понял, правда, почему некоторые работают, а некоторые - нет (хотя в похожих случаях у других работало).
Заработало, когда поменял
hiddenImgNumber[npreload].onload = function() {document.getElementsByTagName('li')[npreload].getElementsByTagName('td')[1].innerHTML = img_html_name[npreload];}
на
if (hiddenImgNumber[npreload].complete) {document.getElementsByTagName('li')[npreload].getElementsByTagName('td')[1].innerHTML = img_html_name[npreload];};
При этом заработало в Опере, но перестало работать в IE. Поэтому порылся в инете и добавил еще
// IE:
hiddenImgNumber[npreload].onreadystatechange = function() {
if(this.readyState == "loaded" || this.readyState == "complete")
{
document.getElementsByTagName('li')[npreload].getElementsByTagName('td')[1].innerHTML = img_html_name[npreload];
}
};
В итоге получился такой скрипт, который работает в FF, IE и Opera:
<script language="javascript" type="text/javascript">
// images preload
function def_img_src (npreload)
{
img_html_name = eval ("img_html" + npreload);
var src_array = new Array();
src_array = img_html_name.split('src="');
src_array = src_array[1].split('"');
var img_src = src_array[0];
return img_src;
};
function hitr_preload(npreload)
{
nnn = npreload+1;
var img_html_name = new Array();
var hiddenImgNumber = new Array();
img_html_name[npreload] = eval ("img_html" + nnn);
hiddenImgNumber[npreload] = new Image();
// FF and Opera:
if (hiddenImgNumber[npreload].complete) {document.getElementsByTagName('li')[npreload].getElementsByTagName('td')[1].innerHTML = img_html_name[npreload];};
// возвращает контент второго td внутри (npreload+1)-го li в документе.
// IE:
hiddenImgNumber[npreload].onreadystatechange = function() {
if(this.readyState == "loaded" || this.readyState == "complete")
{
document.getElementsByTagName('li')[npreload].getElementsByTagName('td')[1].innerHTML = img_html_name[npreload];
}
};
hiddenImgNumber[npreload].src= def_img_src (npreload+1);
};
var npreload=1;
</script>