2012-07-12 2 views
2

새 프로젝트를 진행하고 있으며 다른 웹 사이트에서 사진을 찍고 있습니다.상태 이미지 확인 방법 자바 스크립트로드

문제는 사진을 찍을 때 가끔 404 오류 상태입니다. DOM에서 이러한 이미지를 제거했지만 링크가 깨진 경우 실제 웹 사이트에 오류가 있습니다 (예 : http://p.twimg.com/Axm3Vs-CQAEwfAj.jpg:large)

유일한 정보는 다음과 같습니다. 리소스를로드하지 못했습니다. 서버가 404 상태로 응답했습니다 (찾을 수 없음).

저에게 해결책이있는 사람이 있습니까? 사전에

$('img').error(function(){ 
    $(this).hide().parents('a').parents('li').remove(); 
}); 

감사 :

깨진 이미지를 검출 내 코드가있다!

+0

먼저,'$ (this) .hide(). parents ('li')로 대체 할 수 있습니다.remove();'('parents'가 트리를 비우는 것) - 그 질문을 올바르게 이해했는지 : 404 상태 사진뿐만 아니라 "기본 이미지"까지도 제거하고 싶습니까? – fedosov

+0

네, 맞습니다. 깨진 이미지로 작동하지만 기본 이미지로는 작동하지 않습니다. 아이디어는 슬라이드 쇼에 이러한 이미지를 표시하는 것이며, 슬라이드 쇼에서 기본 이미지를 원하지 않습니다. 부모님 께 감사드립니다. 잊어 버렸습니다. – Simon

+0

제공된 예제 이미지도'HTTP/1.1 404 Not Found '로 응답합니다. 그게 맞습니까? 아니면 우연일까요? 나는 단지 우리가 알아 내길 원한다. @Fresheyeball이 제안하거나, 404를 걸러 낸 것처럼,이 모든 더미 이미지를 수집해야한다. – fedosov

답변

2

정말 어렵습니다. 내가 생각할 수있는 최선의 해결책이 여기있다.

1 단계 : 다양한 이미지 소스에서 404 개의 대체 이미지를 모두 다운로드하십시오. 이러한 이미지를 base64 문자열로 변환하고 해당 문자열을 js의 배열에 저장하십시오.

단계 : How to convert image into base64 string using javascript

3 단계 : : 404 화상을 base64 어레이 테스트 통해 루프 다운로드 된 이미지의베이스 64 문자열 어떠한 일치하면 가상 캔버스 태그를 사용하여베이스 64 문자열로 다운로드 된 이미지를 변환 배열에있는 것들 중 하나. jQuery로 이미지의 트리거 '오류'와 일치하는 경우 기존 .error 스크립트를 재사용하십시오.

+1

유망한 것으로 들립니다. – steve

+0

제가 원했던 문제는 교체 이미지가 원본 이미지의 설정으로 만들어져 모든 대체 이미지가 달라지기 때문에 83x83 크기의 데이터 (10x1000)와 1000x1000 (1MByte) 데이터가있는 경우가 있습니다. 모든 오류에 대해 이미지가 서로 다르기 때문에 이미지가 일치하는지 확인할 수 없습니다. 이것은 진짜 악몽이다! 해결 방법은 모든 해상도 이미지를 다운로드하는 것입니다. 그러나 문자열 일치 여부를 확인하는 데 시간이 오래 걸립니다! – Simon

+0

두 이미지 (샘플 및 새로 다운로드 한 이미지)를 흐리게 처리하고 여러 노드 점에서 해시를 만들 수 있습니다. 또한 샘플 이미지의 해시가이 경우에 한 번만 계산된다는 사실을 더한 것입니다. – fedosov

1

문제에 대한 솔루션이 더 간단하지만 일부 서버 측 코드가 필요합니다 (마지막 부분에서 설명). 따라서, JS는 다음과 같이 표시됩니다 크로스 도메인 요청이 허용되지 않기 때문에

$("img").each(function() 
{ 
    // Check each target image and try to resolve its src 
    $.ajax(
    { 
     url: $(this)[0].src, 
     type: "get", 
     context: $(this), 
     error: function() 
     { 
      // Delete on error (404) 
      $(this).remove(); 
      console.log("ERR!"); 
     }, 
     success: function(data) 
     { 
      // It's OK! 
      console.log("YEAH!"); 
     } 
    }); 
}); 

, 당신은 축복하는 서버 이미지 콘텐츠를 전달하는 간단한 프록시 스크립트를 작성해야합니다.

예 : yoursite.com/imageproxy?src=http://p.twimg.com/Axm3Vs-CQAEwfAj.jpg:large은 원본 헤더가있는 http://p.twimg.com/Axm3Vs-CQAEwfAj.jpg:large 이미지의 콘텐츠를 반환합니다.

UPDATE :

@Fresheyeball 응답에 코멘트에 그림으로 :

Colors comparison

업데이트 2 : 또한

, 당신이 brain.js를 사용하려고 할 수 있다고 생각 신경망을 훈련시켜 나중에 색상과 비교할 때 도움이됩니다. 하지만 ...

이미지에 4 문자열 프록시 (물론 무제한 대역폭이있는 경우)를 작성하는 것이 더 쉽습니다.

+0

404 대체 이미지가 여전히 성공적으로 트리거되지 않습니까? – Fresheyeball

+0

예. 그것은'$ .ajax' 호출의 요점입니다. 이미지에 상관없이 404에 오류가 발생합니다. – fedosov

+0

요점은 대체 이미지가 서버에서 404를 반환하지 않으면 올바른 이미지 인 것처럼 대체 이미지를 반환한다는 것입니다. – Fresheyeball