21. marts 2002 - 11:39Der 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?
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.
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?
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."
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?"
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.
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
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; } }
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å
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.