2012-09-06 29 views
5

に壊れているかどうかを検出:は、私はJavascriptを使用してHTML5のキャンバスに画像を追加している画像ではJavaScript

img = new Image(); 
img.addEventListener('load', loadCallBack, false); 
img.src = image_url; 

そしてloadCallBackは、画像を描画します。

問題は、image_urlが、破損したイメージまたは存在しないイメージを参照することがあります。これが起こると、コンソールに404エラーが表示され、キャンバス上のイメージは白いままです。代わりに、画像のsrc属性を別のimage_urlに置き換えたいと考えています。

私は次のことを試してみました、それが動作しませんでした:

img.addEventListener("error", function(){console.log("404");}); 

どのように私は、画像の404エラーを検出することができますか?

注:まだ解決策を探していますが、これまでに投稿された2つのどちらも解決していません。私のためのjQueryので

+1

'エラーが発生しました(少なくともChromeでは)http://jsfiddle.net/qgJRF/ – bfavaretto

+0

タイトルを編集しました。 'Image()' javascriptクラスはHTML5の前に存在していました(説明)。キャンバスに言及してから、私はあなたの質問にHTML5タグを残しました。 – Christian

+0

しかし、それはこの質問のように聞こえる:http://stackoverflow.com/questions/92720/jquery-javascript-to-replace-broken-images – LonelyWebCrawler

答えて

4

作品... http://jsfiddle.net/5v2qG/

img = new Image(); 
$(img).bind('error', function() { 
     alert('error called');             
}); 
img.src = "invalid_img_name.png";​ 
+0

私はあなたのソリューションのいずれかを働かせて、感謝を探しています。 – LonelyWebCrawler

+0

私は残念ながら、これを動作させることはできません。 – LonelyWebCrawler

+0

@LonelyWebCrawlerはjQueryを使用していますか?イメージsrcをロードしてロードする前に、.bind()イベントハンドラをアタッチしている限り動作するはずです。 – Kostia

10

コスシャの答えと同じコード:ただのjQueryの醜さやバニラのjavascriptの美しさを比較する:

+5

onerrorハンドラに直接割り当てると、割り当てられる可能性のある他のエラーイベントハンドラが上書きされることに注意してください。おそらく単純なケースでは問題にはならないかもしれませんが、ほとんどの場合、img.addEventListener( "error" ...を使用する方が良いですが、addEventListenerを使用してクロスブラウザの問題をすべて処理する必要があります。 –

関連する問題