Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] Variabelen delen tussen scripts

Pagina: 1
Acties:

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Aanvankelijk dacht ik dat dit niet zo moeilijk zou moeten zijn, en dat is het ook niet ... in FF. Maar onder IE6/7 krijg ik het niet aan de praat om een variabele te delen tussen 2 scripts:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JS Test</title>
<script language="javascript" type="text/javascript" src="test1.js"></script>
<script language="javascript" type="text/javascript" src="test2.js"></script>
<script language="javascript" type="text/javascript">

alert(hoi);

function init() {
    alert('init');

    alert(hoi);
}

window.onload = init;
</script>
</head><body></body></html>
test1.js:
JavaScript:
1
var hoi = 4;
test2.js:
JavaScript:
1
alert(hoi);
Het gekke is dat je wel functies kan delen uit scripts, maar de variabelen lijken binnen de scope van het script te blijven?

Enige optie is een functie te maken die de variable als parameter mee geeft en dan returned, maar dit vind ik een beetje rare oplossing.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

als je nou eens defer meegeeft bij je laatste script, werkt het dan wel?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Ook defer heeft geen effect, dit heeft alleen impact op de executievolgorde?

http://www.websiteoptimization.com/speed/tweak/defer/

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Test je dit lokaal of remote?

Bij mij werkt het volgende gewoon:
JavaScript:
1
2
// 1.js
var BtM909 = 'hello world';

JavaScript:
1
2
// 2.js
alert(BtM909)



HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript" src="1.js"></script>
<script type="text/javascript" src="2.js"></script>
<script type="text/javascript">
alert(BtM909);
</script>
</head>

<body>
</body>
</html>

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Ik test via een lokale webserver met IE6, ook jouw voorbeeld werkt niet zelfs met aanpassingen van doctype. Heb je IE6 gebruikt?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Verwijderd

Een <script> sectie word pas geparsed zodra deze gesloten word. Dus alle data die je invoert pas aan het einde. Zo kan je tussen twee <script> blokken dus geen data uitwisselen, tot ze zijn geparsed.

Het is dus niet zo dat je alles in de zelfde volgorde uitvoerd als je het script. Parsing gebeurt zodra het bestand geladen is. En 2.js zou eerder klaar kunnen zijn dan 1.js.

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Met een dergelijke onload-constructie zou ik kunnen afvangen dat alle scripts geladen zouden moeten zijn? Eigenlijk heb ik een javascript-preload nodig.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Geen globale variabelen gebruiken gewoon, dat is zó 20e eeuw... Gebruik dan een property van document.
JavaScript:
1
document.blaat = 42;

JavaScript:
1
alert(document.blaat);

Of je gaat gewoon "echte" classes maken natuurlijk ;)

日本!🎌


Verwijderd

_Thanatos_ schreef op dinsdag 20 november 2007 @ 19:12:
Geen globale variabelen gebruiken gewoon, dat is zó 20e eeuw... Gebruik dan een property van document.
Leg eens uit?

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
_Thanatos_ schreef op dinsdag 20 november 2007 @ 19:12:
Geen globale variabelen gebruiken gewoon, dat is zó 20e eeuw... Gebruik dan een property van document.
[...]
Maar zolang je geen controle hebt over de volgorde waarin de verschillende js files worden geparst lost dat het probleem niet op.

| Toen / Nu


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Zie m'n code-snippets :?
SuperRembo schreef op dinsdag 20 november 2007 @ 20:15:
Maar zolang je geen controle hebt over de volgorde waarin de verschillende js files worden geparst lost dat het probleem niet op.
Als je daar geen controle over hebt, dan ben je gedoemd. Dan zul je je code gewoon anders moeten schrijven. Event driven enzo. Zorgen dat de volgorde van je code niet meer uitmaakt. Bijv:
JavaScript:
1
2
window.onload = function() { ... };
window.onresize = function() { ... };

Ik zeg niet dat deze twee je oplossing zijn, het zijn immers voorbeelden. Maar, deze twee worden altijd aangeroepen in de volgorde die logisch is, en het boeit geen reet waar je ze neer zet en in welke volgorde ;)
Dus event-driven code kan je vriend worden, als je em aardig vindt :)

[ Voor 8% gewijzigd door _Thanatos_ op 20-11-2007 21:01 ]

日本!🎌


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
_Thanatos_ schreef op dinsdag 20 november 2007 @ 21:00:
[...]
Als je daar geen controle over hebt, dan ben je gedoemd. Dan zul je je code gewoon anders moeten schrijven. Event driven enzo. Zorgen dat de volgorde van je code niet meer uitmaakt. Bijv:
[...]
Ja, ik weet dat je het zo kan oplossen.
Mijn punt is dat je eerst beweerde dat het zou helpen als je "document.blaat = 42;" gebruikte in plaats van "var blaat = 42;". Dat haalt niets uit, als je de alert eerder uitvoert dan dat je de var/property zet dan gaat het nog steeds mis.

| Toen / Nu


Verwijderd

Leg eens uit waarom :?

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Ik heb een JS-file waar een coolmenus-definitie in staat, deze is eigenlijk veel te groot (100 KB maar krijgt wel compressie). Deze stond eerst in de HTML zelf maar nu wilde ik hem in een aparte zetten zodat hij kan worden gecached.

Alleen dan loop ik dus tegen het vreemde caching verhaal aan. De enige oplossing is denk ik de onload functie gebruiken en dan via een functie de var naar de HTML-pagina halen.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Mijn voorbeeld werkt lokaal en op een webserver in IE (tot en met 6 kan ik hier testen) en FF :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Topicstarter
Ik geloof dat ik een beetje genaaid werd door Wine, die IE weigert resources te laden (stylesheets, js etc). Nu op een native IE lijkt het beter te werken.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!

Pagina: 1