[Javascript] Hoe javascript werkend m.b.v. document.write ?

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
Ik bouw m.b.v. 'document.write' commando's een complete html pagina op, inclusief alle noodzakelijke tags als html, head, body etc.
Dit gaat in principe goed want ik zie alles keurig netjes in de browser verschijnen.

Nu probeer ik ook gebruik te maken van javascript functies in die opgebouwde html pagina en dit lukt mij niet. Hiertoe schrijf ik via 'document.write' javascriptfuncties in de head sectie.
Losse javascript commando's als 'alert' gaan wel, maar functies worden niet uitgevoerd. Ook externe javascript bestanden worden niet ingelezen.

Kan dit eigenlijk wel, of vraag ik iets onmogelijks? :?

en zij zagen niet hoe spot in mij worstelde met verdriet


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

gebruik je daar toevallig openings en sluitings tags <script ... > </script>?

;)

Bij </script> denkt je eerste Javascript: "hmmm... ik mag het Javascript afsluiten..." Om dat te voorkomen kan je beter het volgende gebruiken:

JavaScript:
1
2
document.write('<script type="text/javascript" src="test.js"></');
document.write('script>');

[ Voor 97% gewijzigd door BtM909 op 02-12-2002 11:29 . Reden: Iets te snel op submit gedrukt ]

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.


  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
Ja.
Als ik ook de source neem van het opgebouwde document, en ik plak het als een nieuw html bestand, dan werken de javascript functies wel.

en zij zagen niet hoe spot in mij worstelde met verdriet


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

kickje vanwege edit van mijn post 2 etages hoger...

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.


  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
Ok, ik zie wat je bedoelt.
Ik gebruik deze code:
JavaScript:
1
document.write "<script language=\"javascript\" src=\"test.js\"><\/script>";


Maar ook met jouw suggestie, werken de geïmporteerde functies niet.

en zij zagen niet hoe spot in mij worstelde met verdriet


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Laat eens een functie zien die niet werkt. Zit die functie in een include-file of meegegeven in het nieuwe document?

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.


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
write is volgens mij een functie (of een methode ofzo..)

wat ik wil zeggen gebruik write("content") ipv write "content"

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

r0bert schreef op 02 December 2002 @ 11:48:
write is volgens mij een functie (of een methode ofzo..)

wat ik wil zeggen gebruik write("content") ipv write "content"
hmmm... niet eens opgemerkt. Maar volgens topicstarter werkt mijn optie ook (nog) niet.

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.


  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
r0bert schreef op 02 december 2002 @ 11:48:
write is volgens mij een functie (of een methode ofzo..)

wat ik wil zeggen gebruik write("content") ipv write "content"
Helemaal gelijk.
Ik had het verkeerd overgetypt. Natuurlijk heb ik er wel haakjes omheen gezet, anders werkte het uberhaupt niet.

Ik zal een voorbeeldje geven van wat ik probeer, maar moet nu even lunchen ...

en zij zagen niet hoe spot in mij worstelde met verdriet


Verwijderd

Probeer i.p.v. een document.write dit eens (in een functie of zo)
HTML:
1
2
var s=document.createElement('link');s.href='test.js';s.type='text/javascript';
document.getElementsByTagName('head')[0].appendChild(s);void(0);

  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
Heel vreemd.

Ik was bezig het te ontwikkelen op Win XP met IE 6 en hier werkt onderstaande code niet.
Nu ik het echter hier op mijn werk uitprobeer op Win NT met IE 5.01 werkt het wel! 8)7
Dit is de code die automatisch een waarschuwingsschermpje moet geven (via javascript alert functie):
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<head>
<title>Test</title>
<script language="javascript">
function write_doc() {
  output =  "<html>\n<head>\n<title>Test</title>\n";
  output += "<script language=\"javascript\">\n";
  output += "function simpele_functie() {\n";
  output += "  alert(\"Test\");\n}\n</";
  output +=  "script>\n";
  output += "</head>\n<body onload=\"simpele_functie()\">\n";
  output += "<h2>Bla</h2>\n</body>\n</html>\n";
  document.write(output);
}
</script>
</head>
<body onload="write_doc()">
<h2>Bla</h2>
</body>
</html>


Is er iemand die het kan verklaren? :?

en zij zagen niet hoe spot in mij worstelde met verdriet


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

als ik ff simpel redeneer dan zou ik zeggen dat je alles 2x in je doc krijgt:2x HTM, 2x Title, 2xscript, enz.

Maar het kan zijn dat ik dat verkeerd zie :)

www.jurgroessen.nl


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
En weenie hoor.. maar volgens mij is het document al gesloten, als je je functie via onload aanroept..

edit:

Probeer 's zoiets

[code=html, 17]
<body onload="write_doc(); alert(document.innerHTML)">
[/code]

[ Voor 46% gewijzigd door r0bert op 02-12-2002 15:24 ]


Verwijderd

Hangloozz schreef op 02 December 2002 @ 14:14:
als ik ff simpel redeneer dan zou ik zeggen dat je alles 2x in je doc krijgt:2x HTM, 2x Title, 2xscript, enz.

Maar het kan zijn dat ik dat verkeerd zie :)
volgens mij zie je het goed.
het document moet er zo uit zien:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<script language="javascript">
function write_doc() {
  output =  "<html>\n<head>\n<title>Test</title>\n";
  output += "<script language=\"javascript\">\n";
  output += "function simpele_functie() {\n";
  output += "  alert(\"Test\");\n}\n</";
  output +=  "script>\n";
  output += "</head>\n<body onload=\"simpele_functie()\">\n";
  output += "<h2>Bla</h2>\n</body>\n</html>\n";
  document.write(output);
}
onload=write_doc
</script>

zonder html tags dus.

[ Voor 48% gewijzigd door Verwijderd op 02-12-2002 15:37 . Reden: toevoeging ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:16

crisp

Devver

Pixelated

Verwijderd schreef op 02 December 2002 @ 15:35:
[...]

volgens mij zie je het goed.
[...]
Nope, een document.write overschrijft hier het huidige document volledig; echter snapt de browser dit niet zozeer en parsed hem niet op dezelfde manier als een 'gewone' pagina. De onload wordt gewoon niet getriggered na de </html>.
Deze methode gaat dus gewoon niet werken helaas...

Intentionally left blank


Verwijderd

oh ok, weer wat geleerd :) Is het misschien op te lossen d.m.v. DOM scripting of blijf je dan hetzelfde probleem houden dat hierboven wordt beschreven?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:16

crisp

Devver

Pixelated

Verwijderd schreef op 02 December 2002 @ 17:36:
oh ok, weer wat geleerd :) Is het misschien op te lossen d.m.v. DOM scripting of blijf je dan hetzelfde probleem houden dat hierboven wordt beschreven?
Je kan wel dynamisch javascripts includen, alleen mbv document.write een javascript schrijven samen met de hele rest van de html werkt niet; althans niet in hetzelfde window.... (in Opera (7) werkt het trouwens wel)

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:16

crisp

Devver

Pixelated

De oplossing:

De reden dat de onload niet getriggered wordt is simpelweg omdat het document niet afgesloten wordt. Dus na de document.write() nog een document.close() toevoegen en het werkt (somehow wordt die nog wel uitgevoerd) :)

Intentionally left blank


  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 20:58
crisp schreef op 03 december 2002 @ 15:56:
De oplossing:

De reden dat de onload niet getriggered wordt is simpelweg omdat het document niet afgesloten wordt. Dus na de document.write() nog een document.close() toevoegen en het werkt (somehow wordt die nog wel uitgevoerd) :)
Thanx! :*)

en zij zagen niet hoe spot in mij worstelde met verdriet

Pagina: 1