Avatar billede benjax Nybegynder
24. september 2001 - 12:43 Der er 11 kommentarer og
2 løsninger

Check om et link eksisterer

Jeg har brug for at checke om en bestemt .HTML-fil kan loades og i så fald åbne den i et popup vindue. Hvis filen ikke kan loades, skal der ingenting ske. Det er vigtigt, at det fungerer både under IE og Netscape.

Skal man have fat i onerror=, eller ...?
Avatar billede jakoba Nybegynder
24. september 2001 - 12:59 #1
Kan du fortælle lidt om de mulige årsager til at den .html fil nogen gange ikke kan loades.

Hvis det er serveren der ofte er nede, er det rimelig nemt. læg et lille .gif billede i samme mappe som filen og indsæt nedenstående script i head af den fil der skal vide om html filen kan nås:

<script language=\'javascript\'> <!--

var tstImg = new Image();
tstImg.src = \"dit_testbillede.gif\";
                // et billede i samme mappe som den fil vil
                // vide om vi kan linke til
var teller = 20;
function testDet() {
    if ( teller-- > 0 ) { // prøver 20 gange
        if ( tstImg.complete ) { // billedet hentet. filen kan nås. Hurra
            window.open( \"dinpopop.html\", \"vinduenavn\" );
        } else {
            setTimeout( \"testDet()\", 300 );
                            // prøver 20*300ms = 6 sekunder før vi opgiver
        }
    }
}; //end testDet()
 
// --> </script>

mvh JakobA
Avatar billede jakoba Nybegynder
24. september 2001 - 13:01 #2
Ups. vi skal have startet scriptet. læge en linie  testDet() nederst i script sektionen:
}; //end testDet()

testDet();  // starter scriptet.

// --> </script>
Avatar billede benjax Nybegynder
24. september 2001 - 13:07 #3
jakoba -->

Det skal bruges til at man en site-administrator kan lægge en html-fil på et bestemt sted, som så kun bliver kaldt, hvis den findes. Forestil dig en portal hvor man på en bestemt dag skal få en særlig information frem i et popup-vindue.

Jeg har desværre ikke mulighed for at bruge din image-baserede løsning; det skal være en html-fil, der checkes for.
Avatar billede jakoba Nybegynder
24. september 2001 - 13:10 #4
Så ved jeg ikke hvordan.

Men hvorfor kan du ikke fortælle site-admin\'en at der skal lægges sådan et lille billede med over når han poster ny .html side og at det skal fjernes igen når siden ikke gælder mere?
Avatar billede jakoba Nybegynder
24. september 2001 - 13:13 #5
Fra serverside er det til gengæld grumme nemt, der kan du teste (med PHP eller ASP) om den side findes og så generere en lidt anderledes html-fil med linket hvis den gør.
Avatar billede olebole Juniormester
24. september 2001 - 13:17 #6
<ole>
Så er det vel med noget back-end og database - og så er det jo bare at anføre i DB\'en, at filen eksisterer.
Ellers kan du jo lægge en onload-handler i det dokumentet, du vil loade. Dokumentet loades så i en skjult frame og der sættes en variabel af onload-kaldet. Det kunne f.eks. være variablen \'isFound\', der oprindelig er sat til \'false\'. På onload bliver den sat til \'true\'.
Så er det blot at spørge:

  if (isFound) {
    // Kode, der skal afvikes
  }

/mvh
</bole>
Avatar billede jakoba Nybegynder
24. september 2001 - 13:18 #7
<?php
if ( file_exists( \"nyhedsfilen.html\" ) ) {
    echo \"<script language=\'javascript\'>\\n\"
    echo \" window.open( \'hyhedsfilen.html\', \'vinduenavn\' );\\n\"
    echo \"</script>\\n\"
?>
placeres et sted i head
Avatar billede benjax Nybegynder
24. september 2001 - 13:28 #8
Jeg har ikke mulighed for at bruge serverside script, desværre. Men jeg fandt frem til en \"pseudo-løsning\", som måske kan give anledning til yderligere kommentarer.

Ideen er at oprettet en usynlig iframe med denm pågældende .HTML-fil som indhold, og så checke, om den er loaded ved at kigge på overskriften... Jep, selvfølgelig virker det kun med en engelsk udgave af IE, og det er ikke godt nok:

<html>
<script language=\"JavaScript\">
document.write(\'<FORM NAME = \"testLink\"><INPUT TYPE = \"HIDDEN\" NAME = \"link\" VALUE = \"The Link Named: \" SIZE = 40><INPUT TYPE = \"hidden\" NAME = \"testValue\"></FORM>\');
document.write(\'<IFRAME NAME = \"newFrame\" HEIGHT = 0 WIDTH = 0></IFRAME>\');
var timeCheck, thisLink, openLink=\'test2.html\';

newFrame.location.href = openLink;
setTimeout(\'autoCheck()\', 500);

function autoCheck()
    {
        timeCheck = setInterval(\"checkLinks()\", 1000)
    }

function checkLinks()
    {
    thisTitle = newFrame.document.title.toLowerCase();
    if (thisTitle == \"cannot find server\")
        {
        clearInterval(timeCheck)
        }   
    else {
        window.open(openLink, \"test\", \"titlebar=no, toolbar=no, height=400, width=600\");
        clearInterval(timeCheck)
    }
    }

</script>
</html>

Måske kan ovenstående bruges til inspiration til en mere bredt virkende løsning.
Avatar billede jakoba Nybegynder
24. september 2001 - 13:32 #9
Det er noget nær oleboles løsning du har fundet der. check lige hans svar igen, det virker i noget nær alle browsere.
Avatar billede olebole Juniormester
24. september 2001 - 13:42 #10
I din hoved fil\'s head:
  var isFound = false;
I filen, du loader:
  <body onload=\"parent.isFound=true;\">
/mvh
Avatar billede olebole Juniormester
24. september 2001 - 13:44 #11
...eller du kan lægge dit window.open()-kald i i det dokument, der loades ind.....hvis det alligevel skal åbnes automatisk.
/mvh
Avatar billede benjax Nybegynder
24. september 2001 - 13:51 #12
Tak til jakoba og stor tak til olebole, det virker perfekt! :o)
Avatar billede olebole Juniormester
24. september 2001 - 14:07 #13
...anytime  :)
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