Toon posts:

JS werkt niet onder XHTML*

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script language="javascript" type="text/javascript">


sponsorstop = new Array(7);
sponsorstop[0] = "<a href='http://www..be' ><img class='pics' src='images/sponsors_top/1.gif' alt='' /></a>";

sponsorstop[1] = "<a href='http://www..com' ><img class='pics' src='images/sponsors_top/2.gif' alt='' /></a>";

sponsorstop[2] = "<a href='http://www..be' ><img class='pics' src='images/sponsors_top/4.gif' alt='' /></a>";

sponsorstop[3] = "<a href='http://www..be' ><img class='pics' src='images/sponsors_top/5.gif' alt='' /></a>";

sponsorstop[4] = "<a href='http://www..be' ><img class='pics' src='images/sponsors_top/6.gif' alt='' /></a>";

sponsorstop[5] = "<img class='pics' src='images/sponsors_top/7.gif' alt='' />";

sponsorstop[6] = "<a href='http://www..be' ><img class='pics' src='images/sponsors_top/8.gif' alt='' /></a>";

index = Math.floor(Math.random() * sponsorstop.length);

document.write(sponsorstop[index]);

</script>


code:
1
2
3
4
5
6
Error Line 45, column 55: document type does not allow element "a" here . 
...<a href='http://www..be' ><img class='pics' src='images/sponsors_

&#9993; 
Error Line 47, column 76: document type does not allow element "img" here . 
... src='images/sponsors_top/7.gif' alt='' />";


Dit is dus een javascript waar ik images in een webpagina laat weergeven (random) die hun sponsorlink bevat.
Ik heb dus alle fouten eruitgehaald volgens xthml1 transitional, behalve deze lukt mij niet. Bij elke lijn uit die javascript conflicteert hij. Nu zegt die w3c dat ik geen image of geen <a> erin mag steken. Ik kan toch moeilijk al die lijnen wissen, want dan ben ik die random sponsor bord kwijt.

hier ook een tekstje waarbij uitleg
The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).
Ik zou dus graag die randomlink met image behouden, maar is er een manier om die fout weg te krijgen. De webpagina werkt dus perfect, maar het is gewoon om w3C transitional valid te zijn.

  • eth0
  • Registratie: Mei 2002
  • Laatst online: 15-09 22:14
Gooi het tussen CDATA tags. Dan ben je er van af.

code:
1
2
3
4
5
<script type="text/javascript">
//<![CDATA[
JE CODE
//]]>        
</script>


http://www.w3schools.com/xml/xml_cdata.asp
http://en.wikipedia.org/wiki/CDATA

Verwijderd

Topicstarter
Ja dat doet het hem :) probleem opgelost

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

document.write in XHTML, right... http://lachy.id.au/log/2005/12/xhtml-beginners

Het punt is dat het voorkomen van </ binnen script feitelijk je script-blok afsluit. Browsers zullen checken of dat niet gevolgt wordt door 'script' maar dat is undefined error-correction. Wat je dus moet doen is de forwardslash escapen:
JavaScript:
1
var s = '<a ...><\/a>';


CDATA is bedoelt voor XML-applications, maar gezien het feit dat je document.write gebruikt neem ik aan dat je nog gewoon in een HTML-omgeving zit te werken (en dus een verkeerde DTD hebt gekozen).

Intentionally left blank


Verwijderd

XHTML kan best gebruikt worden zonder ook af te dwingen dat het door een XML parser gehaald moet worden. Dit is een beetje puntloos (maar verstuur je het toch als xml mime-type, zal je document het niet in IE doen) maar het werkt dan ook met document.write()

Ik gebruik zelf xhtml T omdat ik het wel netter vind dan html.. maar eigenlijk maakt het voor een webdesigner geen klap uit zolang Microsoft niets aan IE gaat doen. Of zouden we, als we alleen nog maar xml websites maken, een klein wonder kunnen afdwingen ;)?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

Verwijderd schreef op maandag 20 november 2006 @ 12:26:
... maar het werkt dan ook met document.write()
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
    <title>foo</title>
</head>
<body>
<div>
    <script type="text/javascript">
    //<![CDATA[
        document.write('<p>Foo!<\/p>');
    //]]>
    </script>
</div>
</body>
</html>

Error: uncaught exception: [Exception... "Object cannot be created in this context"  code: "9" nsresult: "0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)"  location: "http://localhost/bla.xhtml Line: 12"]
Ik gebruik zelf xhtml T omdat ik het wel netter vind dan html.. maar eigenlijk maakt het voor een webdesigner geen klap uit zolang Microsoft niets aan IE gaat doen. Of zouden we, als we alleen nog maar xml websites maken, een klein wonder kunnen afdwingen ;)?
XHTML netter dan HTML vind ik een beetje vreemde opmerking, da's net zoiets als roepen dat Vlaams netter is dan Nederlands. Ik zit in ieder geval niet te wachten op draconische error-handling in een opmaaktaal ;)

Intentionally left blank


Verwijderd

Sorry, wellicht was ik hier niet duidelijk genoeg. Wat ik bedoelde is dat het in de meestgebruikte browsers (IE en FF) het gewenste resultaat behaalt. Ik ben het met je eens dat het niet de bedóeling is, maar het werkt wel... Daarom heb ik er ook een aantal voorwaarden bij gezet.
XHTML netter dan HTML vind ik een beetje vreemde opmerking, da's net zoiets als roepen dat Vlaams netter is dan Nederlands. Ik zit in ieder geval niet te wachten op draconische error-handling in een opmaaktaal ;)
Wat ik hier mee bedoelde is dat XHTML een aantal kanten bevat, zoals het aflsuiten van álle tags, die het naar mijn mening gestructureerder maken dan HTML. Ik vind het prettiger om als zodanig te werken. Vooral in een document dat ook veel php-blokken bevat raak ik het overzicht snel kwijt als ik bijvoorbeeld de <p> tag niet zou afsluiten.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

Verwijderd schreef op maandag 20 november 2006 @ 13:29:
[...]

Sorry, wellicht was ik hier niet duidelijk genoeg. Wat ik bedoelde is dat het in de meestgebruikte browsers (IE en FF) het gewenste resultaat behaalt. Ik ben het met je eens dat het niet de bedóeling is, maar het werkt wel... Daarom heb ik er ook een aantal voorwaarden bij gezet.
Dat het 'werkt' is niets anders dan een lucky side-effect en wel om 2 redenen: HTML parsers doen itt XML-parsers wel aan error-correction (ook al is dat niet gedefinieerd in de HTML specificatie) en browsers hebben de NET SHORTAG feature niet geimplementeerd (die is wel gedefinieerd in de HTML specificatie en daarmee voldoet op dit moment geen enkele browser 100% aan die spec).

Als je document leunt op zaken die enkel in een HTML omgeving werken dan moet je er geen XHTML DTD boven zetten maar gewoon HTML gebruiken. punt. ;)
[...]
Wat ik hier mee bedoelde is dat XHTML een aantal kanten bevat, zoals het aflsuiten van álle tags, die het naar mijn mening gestructureerder maken dan HTML. Ik vind het prettiger om als zodanig te werken. Vooral in een document dat ook veel php-blokken bevat raak ik het overzicht snel kwijt als ik bijvoorbeeld de <p> tag niet zou afsluiten.
Niets verbiedt je om in HTML optionele endtags expliciet op te nemen ;)

Intentionally left blank


Verwijderd

crisp schreef op maandag 20 november 2006 @ 13:52:
[...]

Dat het 'werkt' is niets anders dan een lucky side-effect en wel om 2 redenen: HTML parsers doen itt XML-parsers wel aan error-correction (ook al is dat niet gedefinieerd in de HTML specificatie) en browsers hebben de NET SHORTAG feature niet geimplementeerd (die is wel gedefinieerd in de HTML specificatie en daarmee voldoet op dit moment geen enkele browser 100% aan die spec).
Maar het werkt dus... ;)
Als je document leunt op zaken die enkel in een HTML omgeving werken dan moet je er geen XHTML DTD boven zetten maar gewoon HTML gebruiken. punt. ;)
Dat ben ik met je eens, daarom zeg ik ook dat het niet de bedoeling is. Maar het werkt wel.. :P
Niets verbiedt je om in HTML optionele endtags expliciet op te nemen ;)
Klopt, maar XHTML verbiedt andere medewerkers van het bedrijf om deze weg te laten ;) Je weet ongetwijfeld hoe fijn het is om andermans code aan te moeten passen als deze niet gestructureerd is... dus vandaar.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

Verwijderd schreef op maandag 20 november 2006 @ 14:20:
[...]

Maar het werkt dus... ;)

[...]


Dat ben ik met je eens, daarom zeg ik ook dat het niet de bedoeling is. Maar het werkt wel.. :P
Ik noem het gewoon bad practice als in NO-GO ;)
Juist door de houding van 'het werkt' is XHTML in de praktijk verworden tot niets anders dan een vreemd (want invalid) HTML-dialect en biedt dus geen enkele meerwaarde.
[...]
Klopt, maar XHTML verbiedt andere medewerkers van het bedrijf om deze weg te laten ;) Je weet ongetwijfeld hoe fijn het is om andermans code aan te moeten passen als deze niet gestructureerd is... dus vandaar.
Nee, het verbiedt anderen helemaal niets want als je sluittags weglaat 'werkt' het nog steeds zolang je het als HTML verstuurd :P

[ Voor 10% gewijzigd door crisp op 20-11-2006 14:50 ]

Intentionally left blank


Verwijderd

crisp schreef op maandag 20 november 2006 @ 14:47:
Nee, het verbiedt anderen helemaal niets want als je sluittags weglaat 'werkt' het nog steeds zolang je het als HTML verstuurd :P
LOL touché :P maar goed we valideren de meeste zooi voordat het goedgekeurd wordt dus dat scheelt...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

Verwijderd schreef op maandag 20 november 2006 @ 14:50:
[...]


LOL touché :P maar goed we valideren de meeste zooi voordat het goedgekeurd wordt dus dat scheelt...
Je dient je markup te valideren op de manier waarop hij door useragents ook geinterpreteerd zal worden...

Intentionally left blank


Verwijderd

crisp schreef op maandag 20 november 2006 @ 14:52:
[...]

Je dient je markup te valideren op de manier waarop hij door useragents ook geinterpreteerd zal worden...
Wat bedoel je daar precies mee..? Ik gebruik zelf de tidy plugin voor FireFox en haal de documenten zo af en toe door de W3C validator...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

Verwijderd schreef op maandag 20 november 2006 @ 15:32:
[...]


Wat bedoel je daar precies mee..? Ik gebruik zelf de tidy plugin voor FireFox en haal de documenten zo af en toe door de W3C validator...
Ik bedoel dat als je weet dat je document als HTML geinterpreteerd gaat worden (je verstuurd het immers als text/html) het eigenlijk aan de HTML syntax moet voldoen ;)

Intentionally left blank

Pagina: 1