Avatar billede wizprod.com Nybegynder
31. juli 2001 - 21:25 Der er 13 kommentarer og
2 løsninger

ICQ-status-script-konvertering

Da nedenstående script tager for lang tid at loade, når det eksekveres serverside (med php), ville jeg høre der var nogle kunne oversætte det lille script til javascript.... der hvos jeg går i stå er ved at åbne filen online.dll linie for linie....

$arr = @file(\"http://wwp.icq.com/scripts/online.dll?icq=\".$icq.\"&img=1\");
$len = strlen($arr[1]);
if ($len == 105){print \"<b>Online</b>\";}
elseif ($len == 18){print \"Disabled\";}
elseif ($len == 0){print \"Offline\";}
else {print \"ERROR! DEBUG SCRIPT! ($len)\";}
Avatar billede jakoba Nybegynder
31. juli 2001 - 21:38 #1
Desværre. Javascript sproget kører ude hos brugeren. Det kan slet ikke bruge filer.
Avatar billede winkill Nybegynder
31. juli 2001 - 21:59 #2
Ikke helt korrekt - her er starten på et script som jeg håber nogen kan lave færdig da jeg ikke selv kan få det til at køre helt optimalt... I øvrigt er det KUN testet i Internet Explorer 5.5

var img = new Image();
img.src = \'http://wwp.icq.com/scripts/online.dll?icq=INDSÆT_ICQ_NUMMER_HER&img=1\';
// Her skal indsættes en pause indtil billedet er hentet, ellers returnerer fileSize -1 hvilket er ret ufedt.
if (img.fileSize == 445) {
    alert(\'Online\');
} else {
    alert(\'Offline\');
}

Prøv evt at tilføje en <button onclick=\"alert(img.fileSize)\">Test</button> så vil i kunne se at online giver filesize 445 og offline giver filesize 474 :o)

Nogen der har et bud på hvordan nævnte pause laves ??
Avatar billede jakoba Nybegynder
31. juli 2001 - 22:06 #3
Ja den er nem nok.

var img = new Image();
img.src = \'http://wwp.icq.com/scripts/online.dll?icq=INDSÆT_ICQ_NUMMER_HER&img=1\';
// Her skal indsættes en pause indtil billedet er hentet, ellers returnerer
function afventLoad () {
    if ( img.complete ) {
        if (img.fileSize == 445) {
            alert(\'Online\');
        } else {
            alert(\'Offline\');
        }
    } else {
        setTimeout( \"afventLoad()\", 40 );
}; //end

mvh JakobA
Avatar billede jakoba Nybegynder
31. juli 2001 - 22:08 #4
og funktionen skal startes med linien:

afventLoad();    // placeres efter linien med  }; //end
Avatar billede winkill Nybegynder
31. juli 2001 - 22:13 #5
Jeg fandt en anden løsning :o) Der opstår dog et problem hvis man checlker flere ICQ numre på samme tid... uanset om man benytter din eller min metode. Har du en ide til hvordan det kan løses ? :o)


    function CheckICQStatus(ICQ_NUMMER) {
        var img = new Image();
        img.src = \'http://wwp.icq.com/scripts/online.dll?icq=\'+ICQ_NUMMER+\'&img=1\';
        img.onload = function ICQOnLoad() {
            if (img.fileSize == 445) {
                alert(\'Online\');
            } else if (img.fileSize == 474) {
                alert(\'Offline\');
            } else {
                alert(\'Fejl!\');
            }
        }
    }
Avatar billede winkill Nybegynder
31. juli 2001 - 22:31 #6
NU virker det :o)

    var LoaderStatus = false;
    var LoaderItems = new Array();
    var LoaderIndex = 0;
    var LoaderCount = 0;
    var LoaderImg = new Image();
    function CheckICQStatus(ICQ_NUMMER) {
        if (ICQ_NUMMER) {
            LoaderItems[++LoaderCount] = ICQ_NUMMER;
        } else {
                LoaderStatus = false;
                if (LoaderImg.fileSize == 445) {
                    alert(LoaderItems[LoaderIndex] + \' er online\');
                } else if (LoaderImg.fileSize == 474) {
                    alert(LoaderItems[LoaderIndex] + \' er offline\');
                } else {
                    alert(\'Fejl!\');
                }
        }
        if (LoaderStatus == false && LoaderIndex < LoaderCount) {
            LoaderStatus = true;
            LoaderImg.src = \'http://wwp.icq.com/scripts/online.dll?icq=\'+LoaderItems[++LoaderIndex]+\'&img=1\';
            LoaderImg.onload = CheckICQStatus;
        }
    }
Avatar billede winkill Nybegynder
31. juli 2001 - 22:31 #7
Eks.

CheckICQStatus(\'mitICQnummer);
Avatar billede wizprod.com Nybegynder
31. juli 2001 - 23:10 #8
efter hvad jeg kan se chekker i filesize på online.dll???

Derr skal chekkes en linie-længde i linie 2 :-)
Avatar billede winkill Nybegynder
31. juli 2001 - 23:15 #9
Det der her bliver checket på er størrelsen af det billede som online.dll returnerer. Resultatet er at du får at vide om en bruger en online, offline eller har fravalgt at man må se dette.

Er det ikke den funktionalitet du ønsker - at finde ud af om en bruger en online eller ikke ?
Avatar billede wizprod.com Nybegynder
31. juli 2001 - 23:26 #10
jo lige præcis! bortset fra at det nok skal laves med document.write i stedet :-)
Avatar billede winkill Nybegynder
31. juli 2001 - 23:30 #11
Ja det skal det nok, men det er jo også let at lave... her er et eksempel, men du kan jo modifiserer det som du vil :o)

<script>
    var icqStatus = false;
    var icqItems = new Array();
    var icqIndex = 0;
    var icqCount = 0;
    var icqImg = new Image();
    function CheckICQStatus(icqUIN, callbackFunction) {
        var retVal = -1;
        if (icqUIN) {
            icqItems[++icqCount] = icqUIN;
            icqItems[icqCount+\'cb\'] = callbackFunction;
        } else {
                icqStatus = false;
                if (icqImg.fileSize == 445) {
                    icqItems[icqIndex+\'cb\'](icqItems[icqIndex], 1);
                } else if (icqImg.fileSize == 474) {
                    icqItems[icqIndex+\'cb\'](icqItems[icqIndex], 0);
                } else if (icqImg.fileSize == 1277) {
                    icqItems[icqIndex+\'cb\'](icqItems[icqIndex], -1);
                } else {
                    icqItems[icqIndex+\'cb\'](icqItems[icqIndex], -2);
                }
        }
        if (icqStatus == false && icqIndex < icqCount) {
            icqStatus = true;
            icqImg.src = \'http://wwp.icq.com/scripts/online.dll?icq=\'+icqItems[++icqIndex]+\'&img=1\';
            icqImg.onload = CheckICQStatus;
        }
    }
   
    function cbFunction(icqUIN, uinStatus) {
        if (uinStatus == 1) {
            document.body.insertAdjacentHTML(\'beforeEnd\', icqUIN + \' er online<br>\');
        } else if (uinStatus == 0) {
            document.body.insertAdjacentHTML(\'beforeEnd\', icqUIN + \' er offline<br>\');
        } else if (uinStatus == -1) {
            document.body.insertAdjacentHTML(\'beforeEnd\', icqUIN + \' er utilgængelig<br>\');
        } else {
            document.body.insertAdjacentHTML(\'beforeEnd\', icqUIN + \' melder fejl<br>\');
        }
    }
   
    CheckICQStatus(\'INDSÆT_ICQ_nummer\', cbFunction);
</script>
Avatar billede wizprod.com Nybegynder
31. juli 2001 - 23:31 #12
kan man ikke bare skrive: document.write(LoaderItems[LoaderIndex] + \' er online\');  ??
Avatar billede winkill Nybegynder
31. juli 2001 - 23:51 #13
Øh, jo det skulle jeg mene - men jeg foretrækker insert i stedet for write :o)
Avatar billede jakoba Nybegynder
01. august 2001 - 12:39 #14
Det bliver grumme svært. for scriptet bruger jo en event til at \"genaktivere sig selv senere\". I den ventetid vil browseren tegne videre på dokumentet og sandsynligvis tegne det færdigt.
Avatar billede winkill Nybegynder
01. august 2001 - 22:34 #15
I stedet for insertAd........ kan du jo lave en <DIV ID=myICQ></DIV> og så bruge myICQ.innerHTML = icqUIN + \' er online\';
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

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