Avatar billede nythjem Nybegynder
15. oktober 2005 - 21:56 Der er 14 kommentarer og
1 løsning

Er der forbindelse til internettet?

Hej Alle!

Jeg har en side der ligger lokalt på computeren. Før jeg går videre til næste side vil jeg gerne kontrollere om der er forbindelse til internettet.

Jeg har kigget lidt her på eksperten, men kan ikke rigtig finde noget javascript der løser problemet.

Jeg har tænkt enten kan jeg

- kontrollere om brugeren har fået tildelt en ip-adresse
- loade et billede fra www.123.dk, og hvis billedet ikke bliver loadet må jeg jo være offline
- eller måske findes der et objekt i javascript til selv samme undersøgelse?

Anyways, jeg ville rigtig gerne have hjælp til hvad jeg kan gøre for at løse problemet..

Rigtig hyggelig lørdag aften.. :)
Avatar billede driis Nybegynder
15. oktober 2005 - 22:14 #1
Der findes et XmlHttpRequest objekt i JavaScript, der kan lave et http request. Hvis du bruger den, og den fejler, kan du antage at du er offline. Selve requestet skal selvfølgelig vælges sådan at der er overvejende chancer for at den side du requester ikke er nede, og du derved får fejl på forkert grundlag. Google.com er et nærliggende bud.
Avatar billede olebole Juniormester
15. oktober 2005 - 22:25 #2
<ole>

Brug et billede i stedet. Så kan det anvendes i langt flere browsere  :)

/mvh
</bole>
Avatar billede nythjem Nybegynder
15. oktober 2005 - 22:35 #3
Hej Driis og Ole..

Ja, jeg læste mig lige til, at hvis jeg skulle bruge den metode skulle jeg enten vælge mellem Explorer eller en række andre browsere i definationen.

Men hvordan søren skal jeg kontrollere en load af et eksternt billede?
Avatar billede olebole Juniormester
15. oktober 2005 - 23:04 #4
Du kan skrive noget à la:

<script type="text/JavaScript">
var isOnline = false;  // Denne variabel kan der testes på fra andre funktioner
function checkOnline() {
    var a = ["http://www.google.dk/images/hp0.gif", "http://www.eksperten.dk/img/t.gif"];
    for (var i=0; i<a.length; i++) {
        var im = new Image();
        im.onload = function(){isOnline=true};
        im.src = a[i];
    }
}
checkOnline();
</script>

Jeg ved ikke lige, hvor megen sikkerhed det giver at teste på et billede på Eksperten - men det viser princippet  ;o)
Du skal nok også lige checke, om Goggle's første billede også hedder sådan på specielle mærkedage - hvor de jo somregel har nogle andre billeder på. Næste gang er sikkert Halloween - 30. oktober  <|:)
Avatar billede olebole Juniormester
15. oktober 2005 - 23:10 #5
- idéen er, at bare ét af billederne i array'et loader, må der være hul igennem.
Når der testes på flere servere, er sandsynliheden for et korrekt resultat større - men der bør heller ikke testes på for mange eller for store filer  :)
Avatar billede nythjem Nybegynder
15. oktober 2005 - 23:35 #6
Hej Ole..

Altid en ven i nøden er du :)

Jeg har rodet lidt med dit script, og lagt nogle forskellige alert ind, hvis det nu var at billedet ikke blev loadet, men jeg kan ikke helt se, hvor skellet går mellem "JA" billedet blev loadet, og "NEJ" billedet blev ikke loadet.. :) Kan du sætte en if .. alert(billede fundet) .. else.. alert(billede ikke fundet) ind?
Avatar billede roenving Novice
16. oktober 2005 - 13:47 #7
im.onload = function(){isOnline=true;alert('Du er online !-)');};
Avatar billede plx Nybegynder
16. oktober 2005 - 13:51 #8
Hvad hvis billedet bliver indlæst fra cachen?
Avatar billede nythjem Nybegynder
16. oktober 2005 - 23:56 #9
Hej Jes..

Og hvad så med det modsatte tilfælde? Hvis der ikke er forbindelse? Jeg skal nemlig bruge det i forbindelse med noget installationssoftware, hvor jeg skal connecte til nettet og noget oprettelses software :)

Ole og Jes, I må i øvrigt meget gerne ligge et svar :)
Avatar billede olebole Juniormester
17. oktober 2005 - 02:17 #10
Du kan hente udenom cachen ved at bilde browseren ind, der er tale om et helt nyt billede, den aldrig har set før ved at banke en unik query-streng i 'tubaen' på adressen:
    im.src = a[i] + "?u=" + new Date().getTime();
Avatar billede olebole Juniormester
17. oktober 2005 - 02:55 #11
Skriv dette så langt oppe i koden, som overhovedet muligt:

<script type="text/JavaScript">
var isOnline = false;  // Denne variabel kan der testes på fra andre funktioner
function checkOnline() {
    var a = ["http://www.google.dk/images/hp0.gif", "http://www.eksperten.dk/img/t.gif"];
    for (var i=0; i<a.length; i++) {
        var im = new Image();
        im.onload = function(){isOnline=true};
        im.src = a[i] + "?u=" + new Date().getTime();
    }
}
checkOnline();

function doMyShit(beenHere) {
    if (isOnline) { // Du er online, gør noget
        alert("Smil ... du er på!")
    }
    else if (!beenHere) { // Prøv igen
        setTimeout("doMyShit(true)", 200);
    }
    else { // Så er der zq nok ikke hul igennem
        alert("Check stikket, Pomfrit!");
    }
}
window.onload = function() {
    setTimeout("doMyShit()", 100);
}
</script>

- så skal du - alt efter billedfilernes størrelse og dokumentets egen størrelse - fiddle lidt rundt med de '100' i timeout'en. Jo mindre billeder, du tester på, jo bedre.

Browseren begynder at downloade billederne allerede, når den læser kaldet 'checkOnline();'.
Derefter loader den resten af siden - hvilket giver den en vis tid til at færdiggøre download af filerne.
Derefter giver vi den 100 msek, før vi tester på variablen.
Er variablen stadig false, venter vi yderligere 200 msek og tester igen.
Er variablen stadig false, går vi udfra, PC'en er offline.

Med de viste billedfiler og et helt tomt dokument var de 100 msek nok til, at scriptet virker i både IE, FF og Opera - med min forbindelse, der er ret god. Derudover er der så garderingen på de ekstra 200 msek.

Hvis du samtidig har en del indhold i dit dokument, passer tallene nok meget godt  ;o)
Avatar billede olebole Juniormester
17. oktober 2005 - 03:03 #12
roenving >> pludselig opdager jeg, at vi kan komme til at savne dagene med de 75 nestede tabeller og deres 1127 transparente giffer på hver side. Der er nu noget praktisk ved, at ethvert site har en billedfil på 43 bytes liggende  :]
Avatar billede roenving Novice
17. oktober 2005 - 03:27 #13
*lol*
Avatar billede nythjem Nybegynder
18. oktober 2005 - 09:34 #14
Vejr guderne skulle åbenbart bestemme, at jeg ikke kunne komme online igår, men fra kontoret har de ingen magt, næsten *Gg*

Tusinde tak for hjælpen Ole, og lidt Jes :)

I må have en rigtig god dag.. :)
Avatar billede olebole Juniormester
18. oktober 2005 - 20:50 #15
Selvtak ... og jo, foreløbig har den været fin  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester