Avatar billede mik789 Nybegynder
22. januar 2003 - 00:23 Der er 22 kommentarer og
2 løsninger

xml-prologen

Jeg har lige hjulpet med et script der skulle lave en div der er centreret både horisontalt og vertikalt og med bredde og højde angivet i procent, ikke i px. Jeg fandt en løsning. I kan se den her:

http://www.eksperten.dk/spm/307924 (21/01-2003 23:50:57)

Det vist sig dog ikke at virke før jeg også indsatte det der vist hedder xml-prologen, nemlig:

<?xml version="1.0" encoding="iso-8859-1"?>

Dvs. den samlede løsning der virker, ser sådan ud:

<?xml version="1.0" encoding="iso-8859-1"?>
<!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>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type="text/javascript"><!--
function MyResize() {
self.location.reload();
}
self.onresize=MyResize;
//--></script>

<style type="text/css">
div {
  position : absolute;
  top : 50% ;
  left : 50% ;
  background-color: #ffcc00;
  border: 1px dotted #666666;
}
</style>

</head>

<body>

<script type="text/javascript"><!--
if (document.all) {
var IEw = document.body.clientWidth;
var IEh = document.body.clientHeight;
document.write ('<div style="height: ' + IEh/2 + 'px; width: ' + IEw/2 + 'px; margin-top: -' + IEh/4 + 'px; margin-left: -' + IEw/4 + 'px;"></div>');
} else if (document.getElementById&&!document.all) {
var NSw = innerWidth;
var NSh = innerHeight;
document.write ('<div style="height: ' + NSh/2 + 'px; width: ' + NSw/2 + 'px; margin-top: -' + NSh/4 + 'px; margin-left: -' + NSw/4 + 'px;"></div>');
}
//--></script>

</body>
</html>

------

Hvis ikke den allerførste linje er med, kollapser div'en og mister sin højde. Kan nogen her forklare mig hvorfor?
Avatar billede janegil Nybegynder
22. januar 2003 - 08:03 #1
Du bruker IE, ikke sant? Den gjør forskjell på XHTML med og uten prolog, og det MÅ være en bug. Fx http://heima.olivant.fo/~styrheim/ har rulleskjakten innenfor den røde rammen, men hvis prologen fjernes, kommer rammen innenfor rulleskjakten.

I det minste er vi begge enig om at IE viser sidene bedre med prolog enn uten?

Det kunne jo være spennede å vite om siden din har samme oppførsel hvis du koder det hele som statisk HTML (dvs uten document.write)? Så kan du se om det er skriptingen, eller selve HTML'en, som oppfører seg forskjellig?
Avatar billede arne_v Ekspert
22. januar 2003 - 08:04 #2
Det er en del af XML standarden.

Der er vel ikke noget overraskende i at det ikke virker uden.
Avatar billede mik789 Nybegynder
22. januar 2003 - 08:18 #3
det bliver endnu mere underligt: hvis jeg jeg skriver xml erklæringen om i et php script:

<?php echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>

og så selvfølgelig omdøber til en .php fil, er det kun Netscape 6+ der viser siden korrekt. I IE vises bare en tom side.

arne_v>jamen hvorfor er erklæringen nødvendig? Den er jo ikke nødvendig i så mange andre dokumenter. Men lige præcis for denne side, fungerer det ikke uden. En ting er at det er en del af xml standarden, noget andet er vel hvordan erklæringen virker i browserne og per serverne.

janegil> jeg har haft siden i en statisk version. Det virker fint i både IE og NS, men jo kun i absolutte mål.
Avatar billede janegil Nybegynder
22. januar 2003 - 08:18 #4
arne v: Prologen er en del av XML-standarden. Men XHTML uten prolog er tilsynelatende likevel gyldig XHTML, se
http://validator.w3.org/check?uri=http%3A%2F%2Fheima.olivant.fo%2F%7Estyrheim%2Findex.noxml.html&charset=%28detect+automatically%29&doctype=Inline&ss=1&verbose=1

Dessuten: I XML skal feil resultere i en feilmelding, browseren skal ikke – motsatt HTML – prøve å gjøre det beste ut av det.

I alle fall: Jeg mener også at XHTML bør ha en XML prolog. Ikke så mye for å få IE til å vise siden 'riktig', men fordi det gjør siden til et generelt gyldig XML-dokument, som i prinsippet kan leses av alle XML-applikasjoner.
Avatar billede mik789 Nybegynder
22. januar 2003 - 08:24 #5
janegil> men hvorfor fungerer det ikke i IE når erklæringen udskrives af php?
Avatar billede janegil Nybegynder
22. januar 2003 - 08:28 #6
Så kan det være noe med IE6-skriptets kompatibilitet med IE4.

IE6 forstår både W3C-DOM og IE4-DOM. IE4 oppretter automatisk variable med samme navn som ID'er i dokumentet.

I W3C-DOM kan du gjøre det eksplisitt,
x = document.getElementById("x");
men fordi x allerede ER dette elementet, virker det ikke som det skal.

Kanhende XML-prologen skjærer det ut i papp at det ikke er et IE4-skript, men et DOM-skript?
Avatar billede janegil Nybegynder
22. januar 2003 - 08:39 #7
php-erklæring:
Bytes lukter ikke. Så PHP må skrive et eller annet annerledes, enten i selve dokumentet eller i HTTP-headeren. Du kan se headeren med http://www.garshol.priv.no/download/HTTPTest.html
Avatar billede arne_v Ekspert
22. januar 2003 - 10:14 #8
jane> Det er fuldsætndigt korrekt, at en XML parser skal give fejl
ved syntax fejl i modsætning til HTML. Det nævnes som regel i løbet
af de første 10 minutter på et begynder-kursus i XML.

Men du tolker reglen forkert. Det betyder ikke at en browser som
indeholder en XML parser skal give fejl på et XML dockument med syntax fejl.

Det betyder kun at hvis browseren beslutter at dokumentet er XML og bruger XML
parseren skal det give fejl.

MSIE er berygtet for sin måde at detecte content på. Det ville ikke
overraske mig sport hvis dens logik er:
  if starter med <?xml then
    parse as XML
  else
    parse as HTML
  endif
Avatar billede janegil Nybegynder
22. januar 2003 - 10:39 #9
hmm...Både Opera 7beta2, Mozilla 1.3a og IE6 godtar det ugyldige XML-dokumentet http://heima.olivant.fo/~styrheim/test/overlapp.html.

En teori kunne være at manglende prolog eller andre parserfeil koblet browserne om fra XHTML til HTML-parsing. Men IE6 har fortsatt rammen utenfor rullebjelken, selv om det er en parsingfeil i XML'en.

Den fornuftige måten å programmere en HTML-browser i dag, måtte vel være å dele jobben i to? Først prøve å gjette seg fram fra ugyldig HTML til gyldig XHTML, og deretter vise XHTML? I alle fall burde nå HTML og XHTML vises av det samme programmet?

Uff, de av oss som trodde at XML skulle disiplinere slarkete HTML-kode, kan visst bar gi opp og gå hjem.
Avatar billede mik789 Nybegynder
23. januar 2003 - 00:11 #10
tak for jeres kommentarer. jeg er ikke sikker på at jeg forstår det hele, men til gengæld har jeg eksperimenteret lidt mere. Hele problemet ligger i at IE kun reagerer på javascript egenskabet document.body.clientHeight (altså et mål for det aktuelle browservindues indre højde) under bestemte omstændigheder. Hvis ikke de er til stede er værdien af denne egenskab udefineret.

Det forholder sig sådan at BÅDE xml prologen OG xhtml doctype erklæringen skal være angivet. Det sidste uden det første gør at IE ikke reagerer på clientHeight. Eller også skal HVERKEN xml prologen ELLER xhtml doctype erklæringen medtages, men dokumentet skal bare starte lige på med <html>. Det gør ikke noget at dokumentet alligevel er skrevet i xhtml syntaks. Netscape 6+ har ingen af disse problemer, men NS reagerer heller ikke på clientHeight, men bruger innerHeight. Derudover viser det sig at xml prologen giver problemer på visse Apache servere. Hvis jeg f.eks. lægger et dokument ind med prologen på den server jeg har adgang til på Syddansk Universitet (Apache server - jeg kan finde ud af nogle flere detaljer) giver det en parse error i første linje (xml prologen). Mærkeligt nok reagerer min egen Apache server ikke sådan.

Så hvad vil I anbefale? At være ukorrekt og droppe både prologen og doctype erklæringen, eller at være korrekt og have begge med, men risikere at det ikke kan vises på visse serverere????
Avatar billede arne_v Ekspert
23. januar 2003 - 07:45 #11
Jeg vil anbefale både prolog og doctype.

Og jeg forstår ikke din kommentar om Apache server.

Hvis det er en .html fil, så skal Apache sende bytene uden
at kigge på indhold overhovedet.
Avatar billede mik789 Nybegynder
23. januar 2003 - 08:46 #12
arne> Serveren er indrettet sådan at prologen kun godtages hvis den skrives af php. Et php dokument der starter således:

<?php echo '<?xml version="1.0" encoding="iso-8859-1"?>' ?>
[doctype her]

er OK, men et html dokument der starter sådan:

<?xml version="1.0" encoding="iso-8859-1"?>
[doctype her]

er ikke OK og give en parse error i første linje.

Det må være generelt for flere servere, for i Dreamweaver MX skrives prologen altid med php hvis der er tale om sider til en server med php håndtering.
Avatar billede mik789 Nybegynder
23. januar 2003 - 09:00 #13
men xml prologen ændrer også ved opfattelsen af css boks modellen.

Prøv at sammenligne:

www.dahr.dk/Web/BoxModelHack.html

og:

www.dahr.dk/Web/BoxModelHack.php

Bort set fra at html dokumentet er uden xml prolog og php dokumentet er med, er der ingen forskel i indholdet. Men i php dokuementet opfattes boksene som mindre end i html dokumentet. Jeg har ikke fundet ud af hvad i box modellen der opfattes forskelligt.
Avatar billede janegil Nybegynder
23. januar 2003 - 09:28 #14
http://validator.w3.org/check?uri=http%3A%2F%2Fwww.dahr.dk%2FWeb%2FBoxModelHack.php

BoxModelHack.php har to små syntaksfeil, uten at jeg egentlig tror det har noe med saken å gjøre.
Avatar billede janegil Nybegynder
23. januar 2003 - 09:34 #15
Du sier du ikke får en prolog skrevet at PHP til å virke? I BoxModelHack.php virker den jo, men det er kanskje en annen server? Kunne du legge ut det minimalt gyldige XHTML-dokumentet som både PHP og statisk HTML på serveren din, så vi kan se om vi ser forskjell?

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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">
    <head>
        <title></title>
    </head>
    <body>
        <p></p>
    </body>
</html>
Avatar billede janegil Nybegynder
23. januar 2003 - 09:37 #16
Hvis det er nødvendig å fjerne prolog og doctype for at det skal virke i IE, så fjerner du dem. Sånn er verden innrettet. Eventuelt kan du nok programmere PHP så den bare fjerner dem for IE-klienter. Hvis du fjerner dem for alle, skal du selv sette dem inn i en kopi, som du sender til validator.w3.org for validering.
Avatar billede mik789 Nybegynder
23. januar 2003 - 10:06 #17
janegil> ja det er rigtigt jeg sagde oven for, 22/01-2003 08:18:15, at selv når prologen skrives ud af php bliver der fejl. Det var mig der kludrede. Jeg glemte at omdøbe til .php og så skal der jo blive fejl. Så den er go' nok. På en Apache server skal prologen skrives ud af php - i et php dokument selvfølgelig. Syntaksfejlene er nu rettet. Det giver ingen forskel.

Jeg har lagt dit minimale xhtml dokument på serveren i to versioner:

www.dahr.dk/Web/minimal_xhtml.html
www.dahr.dk/Web/minimal_xhtml.php

Den første giver parse error (fordi den har prologen uden at den er skrevet ud af php), den anden gør det ikke.
Avatar billede arne_v Ekspert
23. januar 2003 - 10:48 #18
Hmmm.

Hvad står der i httpd.conf ud for:

AddType application/x-httpd-php

?
Avatar billede mik789 Nybegynder
23. januar 2003 - 11:09 #19
arne> fortæl mig lige hvor jeg skal kigge. Hvor finder jeg httpd.conf ?
Avatar billede arne_v Ekspert
23. januar 2003 - 11:18 #20
Den ligger i conf directoriet under apache directoriet.

(hvor apache directoriert ligger afhænger lidt af om det er Windows
elelr Linux og om du har valgt at installere det et andet sted
end default)
Avatar billede mik789 Nybegynder
23. januar 2003 - 11:25 #21
jamen det er ikke serveren på min egen pc. det er en fjernserver på Syddansk Universitet, som jeg ikke har anden adgang til end at jeg kan uplode filer til min særlige mappe. Jeg prøver dog om jeg kan se noget på deres online dokumentation.
Avatar billede arne_v Ekspert
23. januar 2003 - 11:29 #22
Det er heller ikke så vigtigt.

Jeg mistænker dem bare lidt for at der står:

AddType application/x-httpd-php .php .html

og ikke:

AddType application/x-httpd-php .php

hvilket gør at en .html også køres gemmen PHP og at det er det
som er skyld i at den parser error.

Iøvrigt: hvilken afdeling af SDU er det ? Odense eller
Kolding/Sønderborg/Esbjerg ?
Avatar billede mik789 Nybegynder
23. januar 2003 - 11:40 #23
Odense. Din forklaring lyder rimelig. De er meget glade for php
Avatar billede mik789 Nybegynder
24. januar 2003 - 00:28 #24
jeg siger tak for hjælpen så langt.
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
Kurser inden for grundlæggende programmering

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