2017-12-26 16 views
-1

var 소스는 존재하는지 확인하고 그렇지 않은 경우 서버에있는 로컬 이미지로 바꿀 수 있습니다 (예 : "/images/default.jpg")?바닐라 JS 원격 이미지가 있는지 확인하십시오. 그렇지 않으면 fallback을 사용 하시겠습니까?

(function() { 
      var youtube = document.querySelectorAll(".youtube"); 
       for (var i = 0; i < youtube.length; i++) 
       { 
        var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg"; 
        var image = new Image(); 
        image.src = source; 

        image.addEventListener("load", function() { 
         youtube[ i ].appendChild(image); 
        }(i)); 

        youtube[i].addEventListener("click", function() { 
         var iframe = document.createElement("iframe"); 
           iframe.setAttribute("frameborder", "0"); 
           iframe.setAttribute("allowfullscreen", ""); 
           iframe.setAttribute("src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1"); 
           this.innerHTML = ""; 
           this.appendChild(iframe); 
        });  
       }; 
     })(); 
+0

과 같은 this.src 속성을 대체하십시오. 이미지 객체에 onerror 이벤트를 사용할 수 있습니다. – KVNSTOBJEKT

답변

0

대부분의 브라우저는 onerror 이벤트 처리기를 지원합니다.

이 같은 https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement

뭔가 당신을 도울 수있는 참조하십시오?

var image = new Image(); 
image.onerror = function(e) { 
    debugger; 
    console.log("Change image src here?"); 
    this.src = "https://images.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";} 
image.src = source; 
+0

고마워요! 마지막 하나를 시도했지만 var 소스가 존재하지 않으면 실행되지 않습니다 (Chrome 디버거 콘솔의 404). – stavasknall

+0

는'image.addEventListener ('load', fn)'을'image.onload = fn' 도움으로 변경합니까? – xadhix

+0

죄송합니다. YouTube가 스스로 폴백을 사용하는 것일 수도 있습니다 (그래도 여전히 404를 보냅니다). 예 : https://img.youtube.com/vi/qIZfstQJapw/sddefault.jpg – stavasknall

1

이 당신을 위해 작동합니다을 src

<img src="main_img.png" onError="this.onerror=null;this.src='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTDnT0jIkNanmzaS2TOjWqrH5zrqujijvxq1v2slPomCcquR9MSVg'" />

그래서 필요한 이미지가 종료하지 않을 경우 기본 이미지 (예 : "/images/default.jpg")로 바뀝니다. 따라서이 경우

+0

나는 운이없는 어제 이것을 시도했다. 어쨌든 고마워! – stavasknall

+0

@stavasknall 시도 해보세요 * 코드 스 니펫 * 버튼을 여기에서 실행 하시겠습니까? 'main_img.png'가 빠져있어서 코드를 실행 한 후 내 기본 활성 이미지가 왜 보이는지 알 수 있습니다. –

+0

예, 저는 서버에 코드를 구현하려고했습니다. 문제는 유튜브가 404 번을 울리는 것과 같지만 동시에 자신의 대체 수단을 사용합니다. 위의 답변을 참조하십시오. – stavasknall