Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Картинка по умолчанию, если отсутвует реальная (https://javascript.ru/forum/dom-window/50603-kartinka-po-umolchaniyu-esli-otsutvuet-realnaya.html)

Eridani 03.10.2014 19:07

Картинка по умолчанию, если отсутвует реальная
 
Добрый день.

Постараюсь объяснить доступно:
Многие наверное видели потоковые плееры для радио на сайтах, в которых транслируется обложка играющего трека и меняется спустя какое то время или же сразу же после перехода на следующий трек.

Вся проблема в чем - картинка существует по адресу www.site.ru/stream.png. Еесли в играющем файле она отсутствует, то по этому адресу выдается 404-ая ошибка.

Я данную картинку прописываю как
<img class="img_reload" src="www.site.ru/stream.png">

с авторефрешем каждые 30 секунд.
Границы картинки прописаны 150 на 150.

Соответственно, если картинка отсутствует, то остается пустая рамочка http://prntscr.com/4so974
Понятное дело, смотрится вообще не комильфо.

Вот у меня думалки не хватает прикинуть, как этот вопрос решить, чтобы при отсутствии картинки выдавалась какая-то дефолтная типа "NoPhoto".

Мне подсказывали, что можно написать скрипт проверки, если картинка присутствует, то выводить блок, а если нет, то display:none;

Не знаю, прокатит ли, но т.к. мои познания в яваскрипт печальны, я пришел сюда просить помощи или хотя бы совета.:help:

Надеюсь на дельные советы:victory:

danik.js 03.10.2014 19:31

А нельзя на сервере подставлять пустую картинку, если реальная отсутствует? Это будет лучшим вариантом.

Eridani 03.10.2014 19:41

Цитата:

Сообщение от danik.js (Сообщение 333330)
А нельзя на сервере подставлять пустую картинку, если реальная отсутствует? Это будет лучшим вариантом.

Если бы...
К сожалению, нет, т.к. играющих треков очень много и проставить каждой картинку это не меньшая проблема.

Aetae 03.10.2014 20:32

Не каждой. Сервер же всё равно отдаёт на отсутствие 404, почему бы вместо этого ему не отдавать картинку-заглушку?

С помощью js как-то так, но это не гуд
<img class="img_reload" id="image" src="www.site.ru/stream.png">
<script>
(function(image, interval){
    var test = new Image();
    test.onload = function(){
        image.src = this.src;
        image.style.display = '';
    }
    test.onerror = function(){
        image.style.display = 'none';
    }

    setInterval(function(){
        test.src = 'http://www.site.ru/stream.png?' + Math.random()
    }, interval)
}(document.getElementById('image'), 30 * 1000))
</script>

Eridani 03.10.2014 21:00

Цитата:

Сообщение от Aetae (Сообщение 333340)
но это не гуд

А почему?

Я уже думал, попробовать написать на php скрипт проверки по коду ответа сервера, если будет 404 выдавать, то дефолтную, если 200, то значит всё пучком, но т.к. сервер сейчас вообще ни одной ошибки не отдает, что-то с доменом, видимо, посему я проверить не могу ничего):-?

MallSerg 04.10.2014 02:30

если картинка загрузилась то она перекроет фон

Vlasenko Fedor 04.10.2014 02:56

Как вариант можно создать файл .htaccess с следующим содержанием
Options -indexes

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ 
	RewriteRule .* noimage.jpg [L]
	
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} \.(css)$ 
	RewriteRule .* nocss.css [L]
	
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} \.(js)$ 
	RewriteRule .* nojs.js [L]
	
    RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
	
</IfModule>

здесь же, рядом с файлом положить файлы которые будут показываться при отсутствии(пустые или заглушки)
noimage.jpg, nojs.js, nocss.css

danik.js 04.10.2014 04:57

Если делать редирект не внутренний, а внешний [R=301,L], то не будет проблем с кэшированием пустого изображения.
Кстати, насколько это надежно? Все браузеры следуют редиректам при загрузке картинок?
Цитата:

Сообщение от Poznakomlus
nojs.js, nocss.css

Ну а это то зачем?

Aetae 04.10.2014 10:26

Судя по всему тот сервер не его, расходимся пацаны.:)

Vlasenko Fedor 04.10.2014 12:59

Цитата:

Сообщение от danik.js
Ну а это то зачем?

По стараюсь объяснить в двух словах. Из этого файла .htaccess видно, что все не файлы будут редиректится на точку входа index.php
Так вот, когда сервер не найдет файлы с расширениями css, js он обратится к index.php
А там, инициализация движка и так далее. Произойдет лишняя работа. Которая в конечном случае должна выкинуть код ответа 404
В вышеприведенном решении, я могу сделать css, js пустыми и картинку однопиксельную. Когда сервер не найдет файлы с этими расширениями. Он поставит файлы по дефолту noimage.jpg, nojs.js, nocss.css. Для них вернет код 200. При этом увеличится отклик и уберет лишнюю нагрузку, так как управление не будет передано в точку входа index.php


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