0

だから、私はこれを持っています:

function isOnline(sURL) {

    var bOnline,
        oImage = document.body.appendChild( document.createElement("img") );

    oImage.onload = function() {

        bOnline = true;

    };

    oImage.onerror = function() {

        bOnline = false;

    };

    oImage.src = sURL;

    return bOnline;

}

...そして、私はまだこの問題を抱えていましたが、ここで少し迷っています。bOnline適切なタイミングで渡す値を取得するにはどうすればよいisOnlineですか? 予想通り、undefined(最初は)返されます。どんな助けでも大歓迎です。

4

2 に答える 2

0

以下のような状況では、常にコールバック関数を使用することをお勧めします

var online = false;

isOnline("htp://....", function(){
   online = true;
}, function(){
   online = false;
});

function isOnline(sURL, onLoad, onError) {

    var oImage = document.body.appendChild( document.createElement("img") );

    oImage.onload = onLoad;

    oImage.onerror = onError;

    oImage.src = sURL;

}
于 2012-08-15T16:58:30.767 に答える
0

コールバックを使用してロジックを続行することを強くお勧めします。

 function isOnline(sURL, callbacks){
     var bOnline,
         oImage = document.body.appendChild( document.createElement("img") );
     oImage.onerror = callbacks.error;
     oImage.onload = callbacks.success;
     oImage.src = sURL;
 }

そして、このような呼び出しの代わりに:

if(isOnline('some-src')) {
    // good stuff
} else {
   // bad stuff
}

次のような関数を使用する必要があります。

isOnline('some-src',{
    success : function(){
        // yey! image is online
    },
    error : function(){
       // eerror loading image. boo :((
    }
});

ある時点でコールバックを使用せずにまだテストしたい場合は、実際の画像オブジェクトを返して、readyまたはerrorフラグを固定できます。

function isOnline(sURL) {
    var bOnline,
        oImage = document.body.appendChild( document.createElement("img") );
    oImage.ready = oImage.error = false;
    oImage.onload = function(){
        oImage.ready = true;
    }
    oImage.error= function(){
        oImage.error = true;
    }
    oImage.src = sURL;
    return oImage;
}


var img = isOnline('some-src');
// .. after some computing
if(img.ready) {
    // yey image  has loaded
} else if(img.error) {
   // damn error :(
} else {
   // still not loaded :-?
}
于 2012-08-15T16:58:58.737 に答える