Kozack
@Kozack
Thinking about a11y

Как проверить существование картинки по УРЛ адресу?

Нужно проверить существует ли изображение по некоему урл адресу в пределах сайта.
И если оно существует - вставить его в тег <img>
А если не существует выполнить ajax запрос.
  • Вопрос задан
  • 5300 просмотров
Решения вопроса 1
@hime2
Запрашивать по этому url картинку и смотреть ответ сервера, если 200 то все хорошо.
Можно на php, можно на js, сканированном пикселей.. к примеру такой, загрузить.. разибить и если к примеру картинка содержит один цвет, значит ее нет. Ну это такая идея.. не много чудная.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AxianLTD
@AxianLTD
Cross-site scripting в JavaScript? Маловероятно IMHO. Если я правильно помню - обращение к URL другого сайта из JS запрещено.
Ответ написан
DIITHiTech
@DIITHiTech
Fullstack javascript developer
пытаться грузить, ловить ошибку..
stackoverflow.com/questions/3381663/how-to-check-i...

и на чистом в целях популяризации ;)

function request( url, type, data){

         if(!url)return Promise.reject(TypeError("url is missing"));

         return new Promise(function(resolve,reject){
             var xmlhttp = new XMLHttpRequest();
             xmlhttp.open(type||'GET', url, true);
             xmlhttp.onreadystatechange = function(){
                 if (xmlhttp.readyState == 4) {
                     if(xmlhttp.status >= 200 && xmlhttp.status<400 ) {
                         resolve(xmlhttp);
                     }else{
                         reject(xmlhttp.status);
                     }
                 }
             };
             xmlhttp.onerror=xmlhttp.ontimeout=reject;
             xmlhttp.send(data||null);
         })
     }

     function isImageExists(url,timeout){
         if(url) {
             return new Promise(function(resolve, reject)
             {
                var img=document.createElement("img"), timer, counter=0;
                 function clear(){
                     if(timer){
                         clearInterval(timer);
                         timer=null;
                     }
                 }
                timer=setInterval(function(){
                    if(img.width){
                        clear();
                        resolve(img);
                    }else{
                        if((counter+=20)>(timeout||5000)){
                            clear();
                            reject(Error("timeout"));
                        }
                    }
                },20);
                img.onload=function(){
                    clear();
                    resolve(img);
                }
                img.onerror=function(error){
                    clear();
                    reject(error);
                }
                img.src=url;
             });
         }
         return Promise.reject(TypeError("url missing"));
     }

     isImageExists("gfx/ajax-loader.gif").then(function(img){
         console.log("img loaded", img);
         document.body.appendChild(img);
     },function(error){
         console.warn("image missing",error);
         request("/index.php?action=error","GET");
     })
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы