Avatar billede mik789 Nybegynder
21. marts 2002 - 11:39 Der er 17 kommentarer og
4 løsninger

Følg / følg ikke link

Her er noget af et script der tjekker om folk har Adobe Acrobat på deres computer:

function tjekAA() {
hasAA = false;
  for (i=0; i<navigator.plugins.length; i++) {
      if (navigator.plugins[i].name.indexOf("Adobe Acrobat") >= 0) {
          hasAA = true;
      }
  }
}

-------
Dette script står i head sektionen. Nede i body er der så nogle pdf links. Nu vil jeg godt have tilføjet en if-else sætning der, hvis folk har Acrobat, gør at onClick på linkene bare åbner filerne uden videre, men som, hvis de ikke har Acrobat, annulerer linket ved onClick og istedet åbner en alert box. Jeg har prøvet at få denne betingelse ind først nede i linkene og siden oppe i head-scriptet, men kan ikke få det til at virke. Nogle forslag?
Avatar billede nikolajdu Nybegynder
21. marts 2002 - 12:08 #1
Sådan?

<html>
<head>
    <title>Untitled</title>
<script>

function tjekAA() {
hasAA = false;

<script>
if (pluginlist.indexOf("Flash")!=-1){
alert('flash')
}


  for (i=0; i<navigator.plugins.length; i++) {
  alert(navigator.plugins[i].name)
      if (navigator.plugins[i].name.indexOf("Adobe Acrobat") >= 0) {
          hasAA = true;
      }
  }
}
function gaaHenTilDu(){

if(hasAA){
return true
}else
alert('Du har ingen Acrobat installeret')
return false

}

</script>

</head>

<body onload="tjekAA()">

<a href="http://www.nikolajdu.dk" onclick="return gaaHenTilDu()">se mit script</a>

</body>
</html>

/Nikolaj
Avatar billede fri-hash Nybegynder
21. marts 2002 - 12:11 #2
måske.....
i head:
function pdflink(fil){
  if(hasAA){
    location.href=fil
  }
  else {
    alert("download acrobat reader");
  }
}

dit link:
<a href="java script:pdflink('dinfil.pdf');">klik</a>
eller
<a href="#" onclick="pdflink('dinfil.pdf');">klik</a>
Avatar billede fri-hash Nybegynder
21. marts 2002 - 12:11 #3
hov ... skulle nok lige have opdateret inden submit :-)
Avatar billede jakoba Nybegynder
21. marts 2002 - 12:20 #4
med dit scrip behøver du blot lave linkene som:

<a href="formodhanhar.pdf"
  onclick="if(!hasAA)this.href='hanharikkesåupload.html';">

mvh JakobA
Avatar billede jakoba Nybegynder
21. marts 2002 - 12:24 #5
Men pas på med at gøre det alt for automatisk. der skal nok være browsere hvor din acrobat-test ikke virker og hvis brugeren kommer med sådan en er det røvirriterende ikke at får lov til at se filen (eller få den selvom han ikke kan se den).
Så giv en mulighed for selv at vælge.

mvh JakobA
Avatar billede mik789 Nybegynder
21. marts 2002 - 14:01 #6
det her er svært. der er ingen af jeres forslag der umiddelbart løser problemet. Prøv at se:

<HEAD>
<SCRIPT language="javascript">
function tjekAA() {
hasAA = false;
  for (i=0; i<navigator.plugins.length; i++) {
      if (navigator.plugins[i].name.indexOf("WoWMedia") >= 0) {
          hasAA = true;
      }
  }

//  alert ("You "+((hasAA)?"have ":"haven't ")+"Adobe Acrobat installed on your computer.");

  if(hasAA) {
    return true;
  }
  else {
    alert("you havent WoW"); return false;
  }
}
</SCRIPT>
</HEAD>

<BODY>
<p>&nbsp;</p>
<p><a href="skabelon.html" target="_blank" onClick="tjekAA();">link</a></p>
</BODY>

---------

Her har jeg for at tjekke indsat et fake plugin-navn. Den sætning der er sat som kommentar er bare en tidligere sætning som virkede (dvs. den del af scriptet der tester for tilstedeværelsen af en plugin, virker). Jeg prøver så at udvide den med et følgende if-else udsagn. Resultatet er at testen stadig virker. Jeg får den alert boks der skal komme når plugin'en ikke findes. Men linket bliver ikke annuleret som det skulle. Jeg kan ikke få testen til samtidig at virke på om linket bliver fulgt. Er der noget om at hvis return false skal virke på et link så SKAL det stå i ankeret og ikke i funktionen i scriptet?
Avatar billede mik789 Nybegynder
22. marts 2002 - 14:43 #7
hej gutter, jeg har selv løsningen (efter at have ventet på yderligere reaktion fra jer :-|

det er først og fremmest et syntaks problem. det her virker:

<head>
<script language="javascript">

hasAA = false;

  for (i=0; i<navigator.plugins.length; i++) {
      if (navigator.plugins[i].name.indexOf("Adobe Acrobat") >= 0) {
          hasAA = true;
      }
  }

msg = "Den fil du har forsøgt at åbne er i PDF format. For at åbne disse filer skal du have Adobe Acrobat Reader installeret på din computer. Du kan installere programmet fra DAHR's hovedside."

</script>

</head>

<body>

<p>&nbsp;</p>

<p><a href="DAHR/nb26.pdf" onClick="if(!hasAA){alert(msg);return false}else{return true}">link</a></p>

</body>

-------

Altså i linket skal der stå:

<a href="minpdf.pdf" onClick="if(!hasAA){alert(msg);return false}else{return true}">link</a>

Jeg har prøvet forskelligt for at få udsagnene på formlen (betingelse)?true:false men så vil den ikke acceptere mere end ét udsagn i hvert led, og jeg kan så ikke få både alert beskeden og annuleringen af linket med. Jeg kunne heller ikke få annuleringen af linket op i head scriptet. Kan det passe? Nu hvor I får point kunne jeg stadig godt lide at vide jeres mening om spørgsmålet: "Er der noget om at hvis return false skal virke på et link så SKAL det stå i ankeret og ikke i funktionen i scriptet?"

tak for hjælp - vi deler i porten
/mik
Avatar billede mik789 Nybegynder
22. marts 2002 - 14:48 #8
må for god ordens skyld tilføje at hele operationen kun virker i NS (har kun testet 4.5). IE udfører som sagt ikke plugintest vha javascript og returnerer derfor under alle omstændiger false, hvilket selvfølgelig gør det her ubrugeligt - men et skridt ad gangen - jeg lærer noget.
Avatar billede jakoba Nybegynder
22. marts 2002 - 15:19 #9
Nej da, bewtingelsen for at return false (eller true) virker som forventer er blot at det er det sidste der står i det javascript handleren udfører.
hvis du ønsker at sætte det ind i funktionen så siger du
    return funktionen(...);
det vil sige at funktionen returnere værdien til handleren og handleren sender den samme værdi videre til browserens interne 'der blev trykket' mekanik.

så du kunne evt lave en funktion a la:

function acrobatOk() {
    if ( !hasAA ) alert( "besked" );
    return hasAA;
}; //end acrobatOk() -> boolean

og så linket:

<a href="minpdf.pdf" onClick="return acrobatOk(};">link</a>

mvh JakobA
Avatar billede jakoba Nybegynder
22. marts 2002 - 15:21 #10
ips. det skal være  acrobatOk()  og ikke  acrobatOk(}  i linket.
Avatar billede jakoba Nybegynder
22. marts 2002 - 15:21 #11
ups. det skal være ups og ikke ips :-))
Avatar billede mik789 Nybegynder
22. marts 2002 - 15:22 #12
OK - det må prøves!
Avatar billede mik789 Nybegynder
22. marts 2002 - 15:24 #13
hej men din løsning får da ikke den anden ting med, nemlig at (!hasAA) også skal annulere linket - eller hvordan?
Avatar billede mik789 Nybegynder
22. marts 2002 - 15:39 #14
jakoba> du har ret, du manglede bare det andet led, men det fungerer sådan:

<script language="javascript">

hasAA = false;

  for (i=0; i<navigator.plugins.length; i++) {
      if (navigator.plugins[i].name.indexOf("Adobe Acrobat") >= 0) {
          hasAA = true;
      }
  }

msg = "Den fil du har forsøgt at åbne er i PDF format. For at åbne disse filer skal du have Adobe Acrobat Reader installeret på din computer. Du kan installere programmet fra DAHR's hovedside."

function tjekAA() {
  if (!hasAA) {
      alert(msg); return false;
  }
  else {
  return true;
  }
}

</script>

og så -

<p><a href="minpdf.pdf" onClick="return tjekAA();">link</a></p>
Avatar billede mik789 Nybegynder
22. marts 2002 - 16:16 #15
jakoba> nej du manglede ikke noge :-\
det var bare mig der ikke lige kunne se at du opnår det samme i ét udsagn (return hasAA)
Avatar billede mik789 Nybegynder
22. marts 2002 - 16:21 #16
og det gør du jo fordi hasAA allerede er defineret som enten true eller false alt efter hvordan testen falder ud, så det er den værdi der returneres til onClick - nnnuuu forstår jeg.

jeg snakker med mig selv, men det er en måde at lære det her på
Avatar billede jakoba Nybegynder
22. marts 2002 - 16:22 #17
:-)
Avatar billede jakoba Nybegynder
22. marts 2002 - 16:28 #18
mik789 >>
  http://www.eksperten.dk/spm/180524
  nede i:  Kommentar fra jakoba  04/03-2002 03:43:23
  fjerde sætning
Avatar billede mik789 Nybegynder
22. marts 2002 - 16:36 #19
hmmmnn, det prøver jeg så lige at forstå. det ta'r måske lidt tid....
Avatar billede mik789 Nybegynder
22. marts 2002 - 16:38 #20
ok, 4. sætning. Jeg lagde ud med den første, og den var hård...
ja, også profferne har brug for at snakke med sig selv
Avatar billede jakoba Nybegynder
22. marts 2002 - 16:39 #21
just.
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