Avatar billede iziqio Nybegynder
02. juli 2005 - 08:31 Der er 39 kommentarer og
1 løsning

Kontroller om link virker?

Hej alle

Er der nogen der har et java script der kan kontrollere om et link virker.

Hvis link:www.google.dk virker så skal den skrive "google.dk" (Som kan man trykke på og åbner google.dk)
Ellers skal den bare skrive f.eks. "Google.dk er ikke online".

skal bruges på en html side, gerne med javascript.
Avatar billede softspot Forsker
02. juli 2005 - 10:19 #1
Skal den bruges i forskellige browsere?
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:05 #2
tja, måske. Men primært IE
Avatar billede softspot Forsker
02. juli 2005 - 11:19 #3
Så kan du måske bruge MSXML.XMLHTTP-komponenten. Jeg skal lige se om jeg kan komme frem til en løsning (der nok kun vil fungere i IE).
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:22 #4
burde man ikke kunne lave det i javascript ? det må da være nemmere
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:23 #5
Kan man ikke bruge isURL ???
Avatar billede softspot Forsker
02. juli 2005 - 11:29 #6
Det bliver også i JavaScript, men XMLHTTP er et ActiveX-objekt som kan læse indhold fra andre URL's...
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:30 #7
ok :D

<script language="javascript">
document.write("Test link");
var resultat = isURL("http://www.google.dk");
if(resultat = true)
{
document.write("Det virker ");
}
else
{
document.write("Det virker ikke");
}
</script>

Kan dette ikke benyttes på een eller anden måde?
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:33 #8
Sorry, har lige set at isURL, bare var en hjemmelavet funktion der kiggede på URL navnet :(

Hvordan fungere den der XML ting?
Avatar billede roenving Novice
02. juli 2005 - 11:34 #9
-- men bruger man en activeX-komponent, vil brugeren jo få en forespørgsel, om han vil tillade farligt indhold, hvis ikke sikkerheden er sat passende lavt ...
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:35 #10
det går ikke at den spørger om noget :(
Avatar billede softspot Forsker
02. juli 2005 - 11:41 #11
Så meget har jeg ikke arbejdet med den komponent, men det er nok rigtig når roenving siger det... :)
Avatar billede iziqio Nybegynder
02. juli 2005 - 11:53 #12
Hvad med at ligge en fil "status.txt" (indeholder: online)
Og så hente teksten fra filen ud i variabel.
Og kigge på om variablen er "online" ???
Burde man ikke kunne det?
Avatar billede softspot Forsker
02. juli 2005 - 11:56 #13
Jeg arbejder lige med en idé hvor et klientscript kalder en side på din webserver som kan checke om et site er oppe, for man kan godt benytte XMLHTTP på serveren uden at sikkerheden spænder ben for checket...
Avatar billede roenving Novice
02. juli 2005 - 11:57 #14
Jeg fandt ud af, at man kan lægge nogle skjulte iframes ind, som kunne reagere onload:

<iframe onload="alert('Google.dk er online');" src="http://www.google.dk" style="width:10px;height:10px;"></iframe>

-- her er størrelsen sat til 10*10px, så jeg kunne se noget, men onload på iframen kan altså bruges til at reagere !-)
Avatar billede softspot Forsker
02. juli 2005 - 12:01 #15
Vil den ikke reagere selvom google returnerer en fejlside?
Avatar billede softspot Forsker
02. juli 2005 - 12:08 #16
Jeg har lavet flg. server-side script som kan checke om et site er oppe. Det har et åbenlyst problem, idet det er langsomt(!), men det kan da indtil videre fungere som inspiration til hvordan det kan laves...:

<%@ language="JScript" %>
<script language="javascript" runat="server">
    function testLink(strURL) {
        try
        {
            var objXML = Server.CreateObject("MSXML2.XMLHTTP");
            try
            {
                objXML.open("GET", strURL , false);
                objXML.send();
               
                if(objXML.status == 200)
                    return "online";
                else
                    return "ikke online";
            }
            catch(e) {
                return "ikke online";
            }
        }
        catch(e) {
            return "ikke online";
        }
    }
</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

<html>
  <head>
    <title>checkSite</title>
  </head>
  <body>
   
    <a href="http://www.microsoft.com" target="_blank">MS [<% Response.Write(testLink('http://www.microsoft.com')); %>]</a><br>
    <a href="http://www.test.dk" target="_blank">Test [<% Response.Write(testLink('http://www.test.dk')); %>]</a><br>
    <a href="http://www.test1.dk" target="_blank">Test1 [<% Response.Write(testLink('http://www.test1.dk')); %>]</a><br>
   
  </body>
</html>
Avatar billede iziqio Nybegynder
02. juli 2005 - 12:46 #17
kigger lige på det iaften eller imorgen. mange tak indtil videre.
Avatar billede olebole Juniormester
02. juli 2005 - 13:30 #18
<ole>

roenving >> Med al respekt, så har man kun sig selv at takke, hvis man får en advarsel i dette tilfælde. Bruger man Norton Virus (... ehhh ... undskyld, den hedder vist 'AntiVirus', omend det er lidt misvisende - hehe) og sætter den 'hårdt' op, ja så får man en advarsel - og så kommer vi og nettet jo aldrig videre end til 'stenalder-HTML'  :)

Skal der være mening med de nye standarder, må vi naturligvis tillade brugen af dem i vores browsere.
At 'forbyde' de potentielt farlige ActiveX-komponenter, finder jeg okay, men XMLHttpRequest-objektet ser jeg ingen grund til at forbyde  :)

/mvh
</bole>
Avatar billede iziqio Nybegynder
04. juli 2005 - 07:05 #19
Når jeg kopiere koden ind i en html fil,kommer der ingen response i []. Det er da alm. html kode ikke ? (+ java script)
Er det nødvendigt at gøre noget specielt før MSXML2.XMLHTTP virker?
Avatar billede softspot Forsker
04. juli 2005 - 14:38 #20
Ja, du skal benytte en lidt anderledes notation for at det fungerer på klienten. Noget i stil med dette (denne version loader og smider en dialog som roenving påpeger og den performer ikke specielt godt - der er nok mulighed for at lave et asynkron opslag som kan gøre browseren mere "opmærksom" mens testen udføres):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

<html>
  <head>
    <title>checkSite</title>
    <script type="text/javascript">
        function testLink(strURL) {
            try {
                var objXML = new ActiveXObject("Microsoft.XMLHTTP");
                try {
                    objXML.open("GET", strURL , false);
                    objXML.send();
                   
                    if(objXML.status == 200)
                        return "online";
                    else
                        return "ikke online";
                }
                catch(e) {
                    return "ikke online";
                }
            }
            catch(e) {
                return "ikke online";
            }
        }
       
        function initLinks() {
            var spans = document.getElementsByTagName("SPAN");
            for(var i = 0; i < spans.length; i++) {
                if(spans[i].className == "checkserver") {
                    var siteName = spans[i].getAttribute("sitename");
                    if(siteName) {
                        var result = testLink(siteName);
                        spans[i].innerText = result;
                    }
                }
            }
        }
    </script>
  </head>
  <body onload="initLinks()">
   
    <a href="http://www.microsoft.com" target="_blank">MS [<span class="checkserver" sitename="http://www.microsoft.com"></span>]</a><br>
    <a href="http://www.test.dk" target="_blank">Test [<span class="checkserver" sitename="http://www.test.dk"></span>]</a><br>
    <a href="http://www.test1.dk" target="_blank">Test1 [<span class="checkserver" sitename="http://www.test1.dk"></span>]</a><br>
   
  </body>
</html>
Avatar billede softspot Forsker
04. juli 2005 - 14:41 #21
Hvis man er rigtig listig, kan man jo tage forælderlinket til span-objektet og aflæse href derfra for at se hvilket link der skal kontrolleres, men inden dette tror jeg dog at det ville være en idé at finde en løsning på performance...
Avatar billede iziqio Nybegynder
14. juli 2005 - 09:44 #22
hmmm, hvorfor siger den [IKKE online] til alle links?
Avatar billede softspot Forsker
14. juli 2005 - 10:58 #23
Det ved jeg ikke umiddelbart, men du kan blive hjulpet på vej til at lokalisere fejlkilden, hvis du ændrer testLink-rutinen til flg.:

        function testLink(strURL) {
            try {
                var objXML = new ActiveXObject("Microsoft.XMLHTTP");
                try {
                    objXML.open("GET", strURL , false);
                    objXML.send();
                   
                    if(objXML.status == 200)
                        return "online";
                    else
                        return "ikke online - statuskode ikke 200 (" + objXML.status + ")";
                }
                catch(e) {
                    return "ikke online - fejl i open eller send (" + strURL + ")";
                }
            }
            catch(e) {
                return "ikke online - objekt ikke oprettet";
            }
        }
Avatar billede iziqio Nybegynder
15. juli 2005 - 14:55 #24
virker det fint på din pc ?
Avatar billede softspot Forsker
15. juli 2005 - 17:55 #25
hmmm... tjaaeh, den melder microsoft.com og test1.dk online, men den melder at der sker en fejl ("fejl i open eller send") under forsøget på at åbne test.dk, så hvorfor den ikke fanger en anden statuskode er jeg ikke helt klar over. Du kan evt. lægge en exception mere ind før objXML.send for at isolere fejlen yderligere.

Hvad er problemet hos dig?
Avatar billede iziqio Nybegynder
18. juli 2005 - 09:40 #26
jeg får :
MS [ikke online - fejl i open eller send (http://www.microsoft.com)]
Test [ikke online - fejl i open eller send (http://www.test.dk)]
Test1 [ikke online - fejl i open eller send (http://www.test1.dk)]

koden er copy-paste ind i en "linktest.html" side.
Hvordan har du testet så det virkede på din?
Avatar billede softspot Forsker
18. juli 2005 - 09:58 #27
Jeg har lavet en side hvor jeg har lagt koden i og kørt det...(?)

Min kode ser ud som herunder og ligger i en fil kaldet "checkSiteClient.asp" (om det er asp eller html skulle jeg ikke mene havde nogen betydning):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

<html>
  <head>
    <title>checkSite</title>
    <script type="text/javascript">
        function testLink(strURL) {
            try {
                var objXML = new ActiveXObject("Microsoft.XMLHTTP");
                try {
                    objXML.open("GET", strURL , false);
                    objXML.send();
                   
                    if(objXML.status == 200)
                        return "online";
                    else
                        return "ikke online - statuskode ikke 200 (" + objXML.status + ")";
                }
                catch(e) {
                    return "ikke online - fejl i open eller send (" + strURL + ")";
                }
            }
            catch(e) {
                return "ikke online - objekt ikke oprettet";
            }
        }

        function testLinkX(strURL) {
            try {
                var objXML = new ActiveXObject("Microsoft.XMLHTTP");
                try {
                    objXML.open("GET", strURL , false);
                    objXML.send();
                   
                    if(objXML.status == 200)
                        return "online";
                    else
                        return "ikke online";
                }
                catch(e) {
                    return "ikke online";
                }
            }
            catch(e) {
                return "ikke online";
            }
        }
       
        function initLinks() {
            var spans = document.getElementsByTagName("SPAN");
            for(var i = 0; i < spans.length; i++) {
                if(spans[i].className == "checkserver") {
                    var siteName = spans[i].getAttribute("sitename");
                    if(siteName) {
                        var result = testLink(siteName);
                        spans[i].innerText = result;
                    }
                }
            }
        }
    </script>
  </head>
  <body onload="initLinks()">
   
    <a href="http://www.microsoft.com" target="_blank">MS [<span class="checkserver" sitename="http://www.microsoft.com"></span>]</a><br>
    <a href="http://www.test.dk" target="_blank">Test [<span class="checkserver" sitename="http://www.test.dk"></span>]</a><br>
    <a href="http://www.test1.dk" target="_blank">Test1 [<span class="checkserver" sitename="http://www.test1.dk"></span>]</a><br>
   
  </body>
</html>
Avatar billede iziqio Nybegynder
20. juli 2005 - 12:59 #28
Det er da mærkeligt.
Hvis jeg kopiere dine kode over i en fil der hedder præcist det samme virker det stadig ikke.(Hverken .asp eller .html virker )
Skal serveren understøtte noget specielt? er det min browser?

MS [ikke online - fejl i open eller send (http://www.microsoft.com)]
Test [ikke online - fejl i open eller send (http://www.test.dk)]
Test1 [ikke online - fejl i open eller send (http://www.test1.dk)]
Avatar billede softspot Forsker
21. juli 2005 - 01:09 #29
Det er klienten som skal have den ActiveX-komponent installeret for at det fungerer. Prøv at kontrollere om objXML er null inden du forsøger at kalde objXML.open. Hvis den er det kan det være at komponenten ikke er installeret... Jeg ved ikke hvordan Microsoft.XMLHTTP kommer på maskinen (om det er med IE 5.5, IE 6.0 eller måske Visual Studio.NET), så det kan være du skal have den installeret inden det fungerer.

Prøv evt. om du kan finde det PROGID (altså Microsoft.XMLHTTP) i registry... Hvis ikke så se om du kan finde MSXML2.XMLHTTP eller blot .XMLHTTP. Det kan give dig en indikation om hvorvidt det er komponenten der mangler eller du skal søge et andet sted...
Avatar billede roenving Novice
21. juli 2005 - 01:32 #30
-- manden bruger vel ikke dos eller linux ...

-- alle nutidige styresystemer (win98sp2+) understøtter sagen ...
Avatar billede softspot Forsker
21. juli 2005 - 01:42 #31
Det nærmeste jeg kan komme (ud fra den betragtning at han benytter IE) er at det kan være Mac... eller findes IE til linux...?
Avatar billede iziqio Nybegynder
24. juli 2005 - 22:18 #32
jeg bruger dos 5 med win 3,1 - gør det noget ?

Nej self. bruger jeg WinXP :P

Nogen ideer?
Avatar billede softspot Forsker
24. juli 2005 - 22:21 #33
Fik du kontrolleret om den komponent var installeret?
Avatar billede iziqio Nybegynder
24. juli 2005 - 22:25 #34
den er der vist, med version 5. (regedit)
Avatar billede softspot Forsker
24. juli 2005 - 22:51 #35
Jeg har ikke umiddelbart nogle idéer til hvad der kan være galt så... desværre :(
Avatar billede olebole Juniormester
25. juli 2005 - 18:53 #36
Det kunne være, du har et andet XML-objekt installeret, så du kan evt. prøve
    var objXML = new ActiveXObject("Msxml2.XMLHTTP");
- begge de to steder, du instantierer objektet.

Det eneste andet, jeg kan komme til at tænke på er, om du skulle have fået virus ... måske endda den, der hedder Norton AntiVirus  ;o)

Hvis man udvikler ASP på en IIS - og NAV er installeret på maskinen - kan man få mange sære oplevelser. F.eks. blokkerer den al tilgang af FileSystemObject uden at sige det til nogen ... hvilket resulterer i, siden bare hænger i serveren.
Om noget lignende sker med XMLHTTP-objektet, har jeg aldrig testet.

Har du NAV installeret på maskinen, så prøv at disable den og prøv softspots script igen  :)
Avatar billede iziqio Nybegynder
26. juli 2005 - 09:08 #37
Jeg bruger ikke NAV men ZA. Så det er nok ikke det.

Der er noget der tyder på at det ikke virker, så det er lige før jeg giver op.

Alle der har bidraget med et forsøg for self point.
Avatar billede softspot Forsker
26. juli 2005 - 09:25 #38
Hvis du kan bruge løsningen (hvis du kan finde ud af hvad det er der blokerer - hvad med WinXp firewall...?), så kan du give mig point - ellers behøves det ikke. :)
Avatar billede iziqio Nybegynder
08. december 2005 - 09:10 #39
lukker
Avatar billede softspot Forsker
08. december 2005 - 17:37 #40
Tak for point :)
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