изображение не регистрируется в ie7? - PullRequest
2 голосов
/ 16 августа 2011

так что у меня есть этот скрипт:

<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, потому что по какой-то причине, если изображения отключены, они возвращают «none» для свойства background css. не тот случай для ie7. второй оператор if пытается обработать регистр для ie, но по какой-то причине ни .onload, ни .onerror не запускаются.

кто-нибудь сталкивался с этим, что может помочь? или укажи мне правильное направление? Я попробовал много способов сделать это. но я просто не могу заставить его работать.

1 Ответ

2 голосов
/ 29 декабря 2011

Это мое решение:

<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>

Живая демоверсия. Единственная проблема - минимальная асинхронность в т.е:

setTimeout(function(){
 disabledActionRun();
}, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...