Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавить кэширование изображения? (https://javascript.ru/forum/misc/24094-kak-dobavit-kehshirovanie-izobrazheniya.html)

ravencrow 17.12.2011 20:21

Как добавить кэширование изображения?
 
Есть такой гаджет для Windows7, раз в час загружает изображение с курсами валют и графиком. Так вот проблема в том, что если вдруг в момент обновления интернет не работал, то вместо изображения целый час будет висеть черный квадрат до следующего обновления.
Нужно добавить условие чтоб если не удалось загрузить изображение, то отображалось бы предыдущее изображение взятое из кэша.
Помогите пожалуйста.
<html xmlns="http://www.w3.org/1999/xhtml">

<script type="text/javascript">
function beginrefresh(){
var oBackground = document.getElementById("background");
oBackground.src = "http://vitiy.info/Currency/currencyRates.png?"+Math.random();
setTimeout("beginrefresh()",60*60*1000)
}
</script>

<head>
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="refresh" content="5" > 
	<title>CBRF Rates</title>
	<style type="text/css">
		body{
			width:160;
			height:166; 	
			margin:0px;
			padding:0px;				 		
		}		
		span{
			font-family: Tahoma;
			font-size: 12pt;
		}
		img
		{
			margin:0px;
			padding:0px;
		}
	</style>
</head>
<body onload="beginrefresh();">
<div>
	<g:background id="background" src="http://vitiy.info/Currency/currencyRates.png" style="width:100%;height:100%;z-index: -1; position: absolute; top: 0; left: 0;"></g:background>

</div>
</body>
</html>

ravencrow 18.12.2011 10:19

что никто не поможет ?

devote 18.12.2011 10:36

не имею представления как можно заставить браузер не менять рисунок в случае неудачного обновления.

ravencrow 18.12.2011 11:13

А если так onerror="image/currencyRates.png"
а файл currencyRates.png предварительно загрузить в папку image на компе

devote 18.12.2011 11:20

Цитата:

Сообщение от ravencrow
а файл currencyRates.png предварительно загрузить в папку image на компе

Предыдущую картинку загрузить пользователю в комп? Сомневаюсь что через яваскрипт это получиться сделать. Можно конечно заюзать канву и в нее засовывать загруженную картину в случае успешности. А вообще да отследить можно событием еррор, но заставить браузер не менять рисонок... хм... хотя можно извернуться примерно так:

создаем объект Image подгружаем в него рисунок, если успешно, заменяем в основном теге на него, если нет, то картинка будет стоять не изменно... Примерно так:
function beginrefresh() {
    var im = new Image(),
        src = "http://vitiy.info/Currency/currencyRates.png?"+Math.random();

    im.onload = function() {
        // Картинка успешно загрузилась
        var oBackground = document.getElementById("background");
        oBackground.src = src;
        setTimeout(beginrefresh,60*60*1000);
    }
    im.onerror = function() {
        // при ошибке можно попробовать загрузить позже
        setTimeout(beginrefresh,60*1000);
    }
    im.src = src;
}

ravencrow 18.12.2011 11:49

devote спасибо, помогло.


Часовой пояс GMT +3, время: 07:19.