2009-07-06 16 views
1

http://localhost:someportnumber/iconを呼び出してサイズ200のレスポンスが返された場合、画像を表示しようとしています。ほとんどのブラウザでサファリの画像読み込みエラーを表示しない

、以下の(削減)に動作します。。 のjQueryを$( '#のMYIMAGE')負荷(関数(){。 jQueryの$(この).SHOW(); });

画像が読み込まれない場合、img要素は決して表示されず、そのすべてが良好です。

しかし、Safariはページエラーとしてこれらの失敗した画像の負荷を報告することを決定しました。私が試してきたように http://img.skitch.com/20090706-kna755s8fbb1pbd3mf9di9hdkg.jpg

限り、私はこれらのエラーを歩き回るの良い方法を見つけたhaventは。正しい方向のポインタがあれば幸いです。

答えて

1

古いバージョンのSafariが壊れていて、image.onloadが正常に動作しません。

それで、私はそれを扱うために、画像がスクリプトによって読み込まれ、そこにいるかどうかテストされたものを使用しました。

簡体字、の線に沿って何か:イメージがロードされ、私たちのGUIでそれらを交換していない私たちがチェックした後の期間

// load the images 
var img = new Image(); 
img.src = "http://whatever/image.jpg"; 
imageList.push(img); 

: : : 

// check 
pollSafariImages(); 


// we have a poller to handle Safari as the onerror does not 
// return 'this' to the image objects, so we don't know which 
// one it was referring to 
function pollSafariImages() 
{ 
    var loadedCount = 0; 

    var index; 
    for (index=0; index<imageList.length; index++) 
    { 
    if (imageList[index].bLoaded == true) 
    { 
     loadedCount++; 
    } 
    else if (imageList[index].complete == true) 
    { 
     imageList[index].bLoaded = true; 
    } 
    } 
    if (loadedCount < imageList.length) 
    { 
    setTimeout('pollImages()', 250); 
    } 
} 

私はサファリ・ハックは、少なくとも便利であると思います:)

1

は、あなたがイメージが存在することを確認し、それがない場合にのみロードするかの機能を挿入しようとしたことがありますか?

はまた、「」=

<img src="blah" onerror="function to remove image if it doesn't load"> 
+0

ONERRORに何かを置くことができ、エラーを報告するサファリを引き起こしているもの。私は、その属性のエラーを処理することができますが、afaictはそれを報告するサファリを停止するjsの方法はありません。 (実際にはjsエラーではない) 同様にif関数を使ったテスト。失敗したテストでは、サファリがエラーを報告する – gcrain