Javascript includen in een functie

Pagina: 1
Acties:

  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Hoi,

Ik wil een extern javascript includen. Nu wil ik indien server 1 down is het script laden van server 2. Om te checken of de server online is doe ik het volgende :
code:
1
[img]"http://www.server1.nl/isonline.gif"[/img]

De volgende functie roep ik aan met load (staat tussen de headtags)
code:
1
2
3
4
5
6
7
function load(error){
   if (error) {
      document.write("<script language='JavaScript' src='http://www.server2.nl/script.js' type='text/javascript'></script>");   
   }else{
      document.write("<script language='JavaScript' src='http://www.server1.nl/script.js' type='text/javascript'></script>");   
   }
}

De functie load blijkt helaas niet te werken. Ik krijg een fout op </script> Het is blijkbaar niet mogelijk om in een functie op deze manier een javascript te includen. Ik ben wezen zoeken op w3schools, google en natuurlijk hier op het forum helaas heb ik niks kunnen vinden wat dit probleem oplost.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Logisch gezien wordt </script> als einde van je JS-blok gezien. Dat kan je op de volgende manier omzeilen:

JavaScript:
1
document.write("<\/script>");


language='JavaScript' hoeft trouwens niet meer in je <script>-element ;)

[ Voor 21% gewijzigd door BtM909 op 17-10-2005 14:49 ]

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.


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 10:22

Cyphax

Moderator LNX
Kun je dat script element niet aanmaken met document.createElement trouwens? Als dat lukt lijkt me dat een stukje netter dan document.write. :)

Saved by the buoyancy of citrus


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 24-04 11:26
Dit geeft inderdaad wel vaker problemen.
Het outputtein in een vorm als '<sc' + 'ript>sfsdf...sdf</s' + 'cript>' is dan de oplossing.

  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Helaas werkt deze optie niet.Ook het verdelen van de tag over twee regels lukt niet.
Ik krijg dan geen fout melding maar het scipt wordt ook niet geincluded.

  • TRON
  • Registratie: September 2001
  • Laatst online: 10:10
frickY schreef op maandag 17 oktober 2005 @ 14:57:
Dit geeft inderdaad wel vaker problemen.
Het outputtein in een vorm als '<sc' + 'ript>sfsdf...sdf</s' + 'cript>' is dan de oplossing.
Dit moet gewoon werken hoor :) Maar dan moet je met double-quotes werken in het geval van de topicstarter... zal de TS dit fout gedaan hebben?

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Op http://www.t-boon.nl/test/ heb ik even een test versie
neer gezet.
Dit is de code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="JavaScript" type="text/javascript">
function load(error){
        if (error) {
            alert('offline');
        }else{
            alert('online');
            document.write("<scr"+"ipt language='JavaScript' src='http://www.t-boon.nl/test/test.js' type='text/javascript'></sc" + "ript");
        }
}
</script>
[img]"http://www.t-boon.nl/test/test.gif"[/img]
<script language="JavaScript" type="text/javascript">
   test("hij doet het"); 
</script>

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 08-04 21:27

Killemov

Ik zoek nog een mooi icooi =)

Jongens, jongens, wat TS wil kan gewoon niet op deze manier, denk nou eens ff na! (8> De document.write gaat, nadat de hele pagina is ingeladen en het plaatje wel of niet is geladen, een regel appenden aan het eind. Je kunt het load event van het plaatje NOOIT afvangen tijdens de opbouw van de HTML, het gebeurt altijd erna. De toegevoegde regel wordt helemaal niet meer geparsed laat staan dat er nog een javascript wordt opgehaald. De enige en juiste manier om dit te doen is met een DOM.createElement.

Hey ... maar dan heb je ook wat!


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Killemov schreef op maandag 17 oktober 2005 @ 15:30:
Jongens, jongens, wat TS wil kan gewoon niet op deze manier, denk nou eens ff na! (8> De document.write gaat, nadat de hele pagina is ingeladen en het plaatje wel of niet is geladen, een regel appenden aan het eind. Je kunt het load event van het plaatje NOOIT afvangen tijdens de opbouw van de HTML, het gebeurt altijd erna. De toegevoegde regel wordt helemaal niet meer geparsed laat staan dat er nog een javascript wordt opgehaald. De enige en juiste manier om dit te doen is met een DOM.createElement.
Laat het een les zijn voor TS om z'n probleem wat duidelijker te omschrijven. ;)

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.


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Ik heb niet zoveel ervaring met dom en java maar vanaf welke javascript versie is dit beschikbaar?
Helaas heb ik het nog niet werkend met create element maar ik zal eerste w3schools wel even doorspitten. De vorderingen kan je zien op www.t-boon.nl/test/ Mocht ik het werkend hebben post ik uiteraard hier de uiteindelijke code.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Je kan beter vragen welke browsers ondersteuning bieden voor DOM ;)
vwb IE in ieder geval vanaf versie 5.0

Intentionally left blank


  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Ik zou ook eerst een keer documentatie lezen over createElement voordat je gewoon wat spul erin knalt en aankomt dat het niet werkt. Dat is namelijk altijd handig, dan weet je meteen hoe je de functie moet aanroepen ;)

disjfa - disj·fa (meneer)
disjfa.nl


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
crisp schreef op maandag 17 oktober 2005 @ 16:07:
Je kan beter vragen welke browsers ondersteuning bieden voor DOM ;)
vwb IE in ieder geval vanaf versie 5.0
Oeps.
Maar versie 5.0 vind ik eigenlijk te hoog, ik wil het nl gebruiken voor websitemeting en wil dus dat zoveel mogelijk brosers het ondersteunen. Mocht iemand dus nog een tip hebben om het toch zonder dom object voor elkaar te krijgen dan hoor ik dit graag.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

ruudboon schreef op maandag 17 oktober 2005 @ 16:11:
[...]
Maar versie 5.0 vind ik eigenlijk te hoog, ik wil het nl gebruiken voor websitemeting en wil dus dat zoveel mogelijk brosers het ondersteunen. Mocht iemand dus nog een tip hebben om het toch zonder dom object voor elkaar te krijgen dan hoor ik dit graag.
Als jij nog mensen tegen zal komen met internet explorer 4 dan vind ik je wel heel erg knap. Straks ga je ook nog zeggen dat je netscape 4.7 wilt gaan ondersteunen 8)7

disjfa - disj·fa (meneer)
disjfa.nl


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 10:22

Cyphax

Moderator LNX
ruudboon schreef op maandag 17 oktober 2005 @ 16:11:
[...]

Oeps.
Maar versie 5.0 vind ik eigenlijk te hoog, ik wil het nl gebruiken voor websitemeting en wil dus dat zoveel mogelijk brosers het ondersteunen. Mocht iemand dus nog een tip hebben om het toch zonder dom object voor elkaar te krijgen dan hoor ik dit graag.
Dan moet je toch aan serverside gaan denken, dan heb je helemaal geen javascript nodig ervoor en werkt het waarschijnlijk in de meeste browsers.

Saved by the buoyancy of citrus


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 13:04
Ik snap niet helemaal waarom je zo moeilijk doet. Je kunt toch gewoon beide scripts laden. Eventueel check je in script twee of script 1 al werkzaam is en pas je daar de werking op aan.

Regeren is vooruitschuiven


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Server side is helaas geen oplossing omdat we alleen de mogelijkheid hebben om het in statische pagina's te verwerken. Beide scripts standaard includen is denk nog de meest handige oplossing alleen een nadeel dat we een tweede server nutteloos beslasten.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

De truc die ik weleens heb toegepast is een variabele vullen in je externe sheet. Na het laden kon ik checken of die var gevuld was. Zo niet, dan wist ik dat de eerste server down was :)

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.


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 27-04 17:48
Je geeft de functies gewoon twee verschillende namen.
onload=functie1() onerror=functie2()
Pagina: 1