Avatar billede w13 Novice
23. maj 2007 - 22:30 Der er 17 kommentarer og
2 løsninger

Importer Javascript-modul inde i Javascript-kode

Hej Eksperter.

Jeg har lavet en kode, som skal benytte forskellige script-moduler, der ligger i forskellige mapper.

Ultimativt skal min kode selv finde disse mapper og importere koderne fra dem en efter en, så man let kan fjerne eller tilføje et modul ved bare at slette mappen med .js-filen.

Så mit spørgsmål: Hvordan importerer jeg automatisk en .js-kode FRA en JavaScript-kode. Dvs. jeg kan ikke bare indsætte:
<script src="modul/kode.js" type="text/javascript"></script>

Håber I kan hjælpe.
Avatar billede roenving Novice
23. maj 2007 - 23:41 #1
Jo, for findes filen eller mappen ikke, vil browseren bare opgive at importere den ...

-- men javascript er designet til en voldsom fleksibilitet, et eksempel kan du finde på min side med Date-udvidelser (http://roenving.users.whitehat.dk/date/roenvingDate.html !-), hvor et sprogmodul kan importeres uden problemer ...

I koden står følgende, hvor importen af det engelske sprog-modul er disabled med html-comments:

...
<!--<script language="javascript" type="text/javascript" src="roenvingDate_en.js"></script>-->
<script language="javascript" type="text/javascript" src="roenvingDate.js"></script>
...

-- fjerner du udkommenterings-tingene og kører det, vil den straks snakke engelsk (dog ikke, hvis du bruger format-tingen uden parametre, da den bruger den aktuele arbejdsstations standard !-), prøv det f.eks. ved at bruge filen lokalt efter at have rettet referencerne til siden eller ved at downloade .zip-filen !o]
Avatar billede w13 Novice
24. maj 2007 - 00:21 #2
Ok. Jeg er nu ikke helt sikker på, det løser det i mit tilfælde. Mit problem er, at jeg laver en texteditor i JavaScript, og jeg vil helst lægge alle knapper (/funktioner) ind som moduler. Dvs. placere dem i mappen "moduler", og jeg håbede så, at min kode selv kunne importere alle moduler i denne mappe.

Er det en mulighed? Muligvis bare ved, at jeg skriver modulernes navne ind i et array..
Avatar billede thesurfer Nybegynder
24. maj 2007 - 00:26 #3
Ang "Ultimativt skal min kode selv finde disse mapper og importere koderne fra dem en efter en, så man let kan fjerne eller tilføje et modul ved bare at slette mappen med .js-filen.":

Her lyder det som om, at du har brug for noget serverside scriptsprog, som f.eks. ASP eller PHP.

- ASP/PHP løber mapperne igennem, og kan udskrive "<scrip...></script" koden.
Avatar billede w13 Novice
24. maj 2007 - 00:37 #4
Jaeh, det frygtede jeg lidt. ASP er ikke et problem, men jeg håbede at holde grundstrukturen i JavaScript. Derfor ville det være fint nok, at jeg skulle skrive modulerne ind i et array, som den så gennemløber. Så sådan set søger jeg bare en kode, der løber array'et igennem og importerer et eksternt script med det filnavn, der står på den givne arrayplacering og så tilføjer ".js". :S
Avatar billede roenving Novice
24. maj 2007 - 00:43 #5
Hvis du skriver en fuld liste af moduler, men kun stiller noget til rådighed i det aktuelle bibliotek, vil browseren simpelthen overse de fraværende ...

<script language="javascript" type="text/javascript" src="/modul/modul1.js"></script>
<script language="javascript" type="text/javascript" src="/modul/modul2.js"></script>
<script language="javascript" type="text/javascript" src="/modul/modul3.js"></script>
<script language="javascript" type="text/javascript" src="/modul/modul4.js"></script>
<script language="javascript" type="text/javascript" src="/modul/modul5.js"></script>
<script language="javascript" type="text/javascript" src="/modul/modul6.js"></script>


-- hvis modul3 og modul5 så mangler, ja så er de ikke til rådighed, og så kan du i din generelle kode bare teste for, om de objekter/variable, der er specifikke for modulet er til rådighed på samme måde, som jeg gør i mit Date-script !-)
Avatar billede thesurfer Nybegynder
24. maj 2007 - 00:47 #6
Yeps.. begge to.. :-)

ASP udskriver en liste, enten som array eller som script-tags, som så kan bruges..

Hvis array metoden kan bruges, kan begge metoder bruges, i det ASP-koden så kan afgøre, som et modul findes eller ej..

JavaScript kan jo ikke læse mapper-strukturen, men det ASP jo.. :-)
Avatar billede thesurfer Nybegynder
24. maj 2007 - 00:55 #7
roenving> Kan man egentligt inkludere JavaScript filer, ved at lade JavaScript udskrive (document.write) script-tags'ne?

Hvis ja, kunne man lave en array

moduler = new Array["modul1","modul2",...];

og gennemløbe arrayen, og udskrive script-tags med

tmp = "";
for(i = 0; i < moduler.length; i++)
{
document.write('<' + 'script language="javascript" type="text/javascript" src="/' + moduler[i] + ' + /start.js"><' + '/script>');
}

Til dette eksempel, har jeg har valgt følgende struktur:

- mappenavnet er navet på modulen
- hvert modul har en start fil, kaldet start.js

Ved load af et modul, loades "/MAPPENAVN/start.js".

What say you?
Avatar billede thesurfer Nybegynder
24. maj 2007 - 00:57 #8
Skulle have været:

document.write('<' + 'script language="javascript" type="text/javascript" src="/' + moduler[i] + '/start.js"><' + '/script>');

og sikkert også:

for(i = 0; i < moduler.length - 1; i++)

Hvis der er 2 moduler, er længden af moduler-arrayet ved 2, men index'erne er "0" og "1".. længden (2) - 1 = 1, hvilet er max index.. :-)
Avatar billede thesurfer Nybegynder
24. maj 2007 - 00:58 #9
Jeg tester det da bare lige selv.. :-)
Avatar billede thesurfer Nybegynder
24. maj 2007 - 01:02 #10
Det her ser ud til at virke som det skal:

<script type="text/javascript" language="javascript">
moduler = new Array("modul1","modul2");

for(i = 0; i < moduler.length; i++)
{
    document.write('<' + 'script language="javascript" type="text/javascript" src="' + moduler[i] + '/start.js"><' + '/script>');
}

</script>

Mappe-struktur:

index.htm
modul1
modul1\start.js som indeholder: alert("modul 1");
modul2
modul2\start.js som indeholder: alert("modul 2");
Avatar billede roenving Novice
24. maj 2007 - 01:06 #11
-- jeg ville nok anbefale, at du gør det via en DOM-kompatibel metode:

moduler = new Array["modul1","modul2",...];

var hParent = document.getElementsByTagName("head")[0];
for(i=0,im=moduler.length;im>i;i++){
  newScript = document.createElement("script");
  newScript.setAttribute("type","text/javascript");
  newScript.setAttribute("src","moduler/" + moduler[i]);
  hParent.appendChild(newScript);
}
Avatar billede thesurfer Nybegynder
24. maj 2007 - 01:09 #12
Btw.. det skal med med "()" i stedet for "[]" her:

moduler = new Array("modul1","modul2");

Jeg kan aldrig hitte u' a' de der JavaScript-array-klammer.. :-)
Avatar billede thesurfer Nybegynder
24. maj 2007 - 01:10 #13
..og sådan for at få mit eksempel (med "start.js", som du vist også har brugt) til at virke..

  newScript.setAttribute("src", moduler[i] + "/start.js");

:-)
Avatar billede roenving Novice
24. maj 2007 - 01:26 #14
Tjah ...

var moduler = ["modul1","modul2",...];

-- er vist det simpleste ...

Alene virker de firkantede paranteser som en Array-erklæring (ligesom tuborger virker som en object-erklæring !-), men skal man bruge new-keywordet til Array (eller Object for den sags skyld !-), skal man bruge din seneste udgave ...
Avatar billede w13 Novice
24. maj 2007 - 16:29 #15
I er da bare for geniale! :)

Og svar så lige begge 2.
Avatar billede thesurfer Nybegynder
24. maj 2007 - 20:30 #16
Ok :-)
Avatar billede w13 Novice
25. maj 2007 - 00:04 #17
Monsieur Rønving? :)
Avatar billede roenving Novice
25. maj 2007 - 16:16 #18
Velbekomme '-)

-- har lige været optaget af andre ting ...
Avatar billede roenving Novice
25. maj 2007 - 17:23 #19
-- og 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