Ho trovato qualcuno che realizza questo con un uso molto intelligente Imagedell'oggetto nativo .
Dalla loro fonte, questa è la funzione principale (ha dipendenze da altre parti della fonte ma hai l'idea).
function Pinger_ping(ip, callback) {
if(!this.inUse) {
this.inUse = true;
this.callback = callback
this.ip = ip;
var _that = this;
this.img = new Image();
this.img.onload = function() {_that.good();};
this.img.onerror = function() {_that.good();};
this.start = new Date().getTime();
this.img.src = "http://" + ip;
this.timer = setTimeout(function() { _that.bad();}, 1500);
}
}
Funziona su tutti i tipi di server che ho testato (server Web, server ftp e server di gioco). Funziona anche con le porte. Se qualcuno incontra un caso d'uso che non riesce, si prega di pubblicare i commenti e aggiornerò la mia risposta.
Aggiornamento : il link precedente è stato rimosso. Se qualcuno trova o implementa quanto sopra, commenta e lo aggiungerò nella risposta.
Aggiornamento 2 : @trante è stato abbastanza carino da fornire un jsFiddle.
http://jsfiddle.net/GSSCD/203/
Aggiornamento 3 : @Jonathon ha creato un repository GitHub con l'implementazione.
https://github.com/jdfreder/pingjs
Aggiornamento 4 : sembra che questa implementazione non sia più affidabile. Le persone segnalano inoltre che Chrome non supporta più tutto, generando un net::ERR_NAME_NOT_RESOLVEDerrore. Se qualcuno può verificare una soluzione alternativa, la inserirò come risposta accettata.
"/?cachebreaker="+new Date().getTime();a alla fine di img src, se necessario.