2011-08-16 29 views
2

はので、私は、このスクリプトを持っている:イメージinerrorがie7に登録されていませんか?

私は彼らが私はアプリは画像なしで使用することができるので、画面に戻ってテキストを持参する必要がある場合、画像は、ブラウザで無効になっているかどうかを確認する必要があり
<script type="text/javascript"> 
     $(window).load(function() { 
      var imagePath = new String($('.give').css("background-image").toString()); 
      if (imagePath == "none") { 
       $('.give').css("text-indent", "0px"); 
      } 
      else if (imagePath != null) { 
       var tempImage = new Image(); 
       tempImage.onerror = function() { 
        if (!tempImage.complete) { 
         $('.give').css("text-indent", "0px"); 
        }    
       } 
       imagePath = imagePath.split("images/")[1]; 
       imagePath = "images/" + imagePath.split(")")[0]; 
       imagePath = imagePath.split('"')[0]; 
       tempImage.src = imagePath; 
      } 
     }); 
    </script> 

。最初のif文はchromeとfirefoxを処理します。何らかの理由で、画像が無効になっているとバックグラウンドCSSプロパティに "none"が返されるからです。 ie7の場合ではありません。 2番目のif文は、つまり、何らかの理由で.onloadまたは.onerrorのいずれも実行されていないために、そのケースを処理しようとします。

この問題を起こした人は誰ですか?正しい方向に私を向ける?私はこれを行うには多くの方法を試みた。しかし私はちょうどそれを働かせるように見えない。

+0

あなたはtempImage.onerror =関数(){警告( 'エラー' をしようとしました)}それは設定されていない完全なものではないことを確認するために – mplungjan

+0

私はそれを前に試してみましたが、私は正気のためだけに再試行し、onerrorはまだ呼び出されていません。 –

答えて

2

これは私のソリューションです:

<script type="text/javascript"> 
    detectImageEnabledMode({ 
     onDetectImageIsDisabled:function(){ 
      alert('disabled'); 
     }, 
     onDetectImageIsEnabled:function(){ 
      alert('enabled'); 
     } 
    }); 
    function detectImageEnabledMode(options){ 
     /* define disabled/enabled actions */ 
     var actionCounter = 0; 
     var enabledAction = (options.onDetectImageIsEnabled && typeof(options.onDetectImageIsEnabled)=='function')?options.onDetectImageIsEnabled:function(){}; 
     var enaledActionRun = function(){ 
      if(actionCounter) return; 
      actionCounter++; 
      enabledAction(); 
     } 
     var disabledAction = (options.onDetectImageIsDisabled && typeof(options.onDetectImageIsDisabled)=='function')?options.onDetectImageIsDisabled:function(){}; 
     var disabledActionRun = function(){ 
      if(actionCounter) return; 
      actionCounter++; 
      disabledAction(); 
     } 
     /* create image */ 
     var img = new Image(); 
     var currentTime = (new Date()).getTime(); 
     if(navigator.appName.indexOf('Microsoft Internet Explorer') != -1){// ie 
      img.onload = enaledActionRun; 
      img.onabort = enaledActionRun; 
      img.onerror = enaledActionRun; 
      img.src = currentTime+'.'+currentTime+'?time='+currentTime; 
      setTimeout(function(){ 
       disabledActionRun(); 
      }, 0); 
     }else if (navigator.appName.indexOf('Opera') != -1) {// opera 
      img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="+'?time='+(new Date()).getTime(); 
      if(img.complete){ 
       enaledActionRun(); 
      }else{ 
       disabledActionRun(); 
      } 
     }else{// other 
      img.src = currentTime+'.'+currentTime+'?time='+currentTime; 
      if(img.complete){ 
       disabledActionRun(); 
      }else{ 
       enaledActionRun(); 
      } 
     } 
    } 
    // tested in: ff 2+, opera 9+, chrome, safari 4+, ie 6+ 
</script> 

Live demo. 唯一の問題 - すなわち、最小の非同期:

setTimeout(function(){ 
disabledActionRun(); 
}, 0); 
+0

うわー、それは素晴らしいです、私は誰も実際にこれを解決しようと思ったことはなかった、あなたのJSは素晴らしいbtwです。 –

関連する問題