Håvard Pedersen

En blogg om vår digitale hverdag og andre pretensiøse temaer :)

Category: Webutvikling

Is XHTML supported wide enough for everyday use?

Today I stumbled upon an article by Lachlan Hunt which lists some of the problems with using XHTML for webpages. After having read through it, I was nearly ready to reimplement my XHTML pages in HTML… The main cause for this was IE’s lack of support for application/xhtml+xml content. It won’t render it, but instead provides you with a standard download dialog. Serving XHTML as text/html, like most people do nowadays is actually fooling older user agents (like IE) to treat the page as good ole’ HTML. But there were a lot of other issues with XHTML I didn’t like the sound of either.

This would actually make my employer have to use HTML Transitional, since some of the ad serving is done using <iframe>, which isn’t allowed in the strict doctypes. You can read more on the differences between strict and transitional markup here. I might be arrogant, but HTML4 Transitional sounds a bit too nineties for me to accept, even if it is an acknowledged standard. ;-)

Luckily, the XHTML specs states that text/html is ok to use for XHTML documents, and they even included a thorough appendix on how to make sure your XHTML document renders correctly in browsers that treat it like HTML. Very good reading, and it contained several implications I weren’t aware of!

Edit 1: There’s an article over at workingwith.me.uk about sending mime headers depending on what the user agent supports. Highly recommended reading. Works like a charm here. :) Though I was a bit shocked to notice that W3C’s validator doesn’t send the correct ACCEPT-headers.

Edit 2: W3C has a table with the definitive overview of contenttypes for the differenct specs.

Edit 3: The code from www.workingwith.me.uk har some bugs if a browser explicitly states it does NOT want application/xhtml+xml. I rewrote my handling using some code from www.autisticcuckoo.net which seems to work more reliably (setting Q to 1 as default).

Finding the best way to insert Flash

In my earlier days (before I switched from Opera to Firefox, now I use the AdBlock Plus Firefox extension to block ads) I used to surf the web with Flash disabled. I was actually quite shocked to notice how many websites that just didn’t display anything when read though a browser without Flash support. This might be fixed by what I am about to discuss here, but it’s not my main point.

Have you ever tried validating a page with Flash in it? Chances are it didn’t validate. Even Adobes official material on how to embed Flash encourages use of the <embed> tag, which is not a valid tag in any of the W3C specs for markup languages on the web. It’s a Netscape invention, and it actually took quite some time until the Mozilla-based browsers managed to support the <object> tag in a satisfactory fashion. Frustrated with this fact, I started Googling, and this opened up a can of worms, as Internet Explorer didn’t fully support the <object> tag in a standard-conforming way either…

All I really wanted was a way that…

  • Was completely valid (X)HTML.
  • Sent the user to the Flash download center if the Flash plugin is missing or out of date.
  • Did not require JavaScript running in the browser in order to display the Flash. More and more people (mostly geeks) actually surf with JavaScript disabled.
  • Didn’t use the IE-specific conditional construct <!–[if !IE]> <–> (I don’t like browser-specific coding, even if it doesn’t break the standard).

Read the full post »

Run several IE versions on one computer

This is a webdesigners dream… Haven’t you wished there was a way to quickly test a page in different versions of IE? If you’ve tried, you probably know that installing Internet Explorer will overwrite any verion currently installed. One install at a time. Bah humbug!

The rescue comes in the form of IE standalone distributions from evolt.org. Just download (I tried the 9x version under Windows XP), unzip, doubleclick iexplore.exe and off you go! Note that the about dialog will display the version of your current system IE install, so there’s no way of knowing which IE you’re running without remembering which version you launched or looking at the HTTP headers.

Imagine my relief when I discovered this page works nice in both IE 5.5 and 5.0 (though a slight menu anomaly on the latter). :)

Update: Thanks to Yousif Al Saif at TredoSoft there is now an installer that installs IE 3.0-6.0 side by side on your computer! Recommended.

Google Homepage plugins

Og der var min første modul for Google Homepage et faktum! :) Den viser status (inkludert spilleliste) for spilleserveren min og kan testes ut ved hjelp av knappen nederst på statussida på spilleserveren min (fjernet, pga bytte av CMS).

En modul er i utgangspunktet en xml-fil med inline html og Javascript.

Problem nummer en er at de fleste nettlesere av sikkerhetshensyn ikke lar Javascript sendte http-forespørsler til andre servere enn serveren HTML-sida hentes fra. Greit i mange situasjoner, men min modul leses jo fra Google (siden Google må parse og wrappe modulen), og da begrenses mulighetene fort. Nå har Google tenkt så langt og gitt deg en Javascript funksjon som heter _IG_FetchContent(). Fine greier, tenkte jeg. Men dessverre cacher denne funksjonen responser i timevis, så den blir totalt ubrukelig til det meste av dynamiske løsninger. Dette måtte jeg løse ved å legge til ?randomshit=12345 i URL’en, hvor 12345 er et slags hjemmelagd timestamp som er garantert unikt over en periode på 28 dager. Ikke pent, men det duger inntil Google kan tilby noe bedre.

Problem nummer 2 var selvfølgelig at spilleserveren min i utgangspunktet bare rapporterer via rå TCP, men dette løste jeg ved å lage et lite PHP-script på serveren som modulen min spør. Dette scriptet kontakter igjen spilleserveren direkte og konverterer infoen til HTML før den returneres.

Ellers kan jeg nevne at modulen min krever å kjøres inline (div istedenfor iframe) siden den har variabel høyde og oppdaterer seg hvert 30. sekund uten å reloade siden (bytter bare ut innerHTML for div-taggen).

Jeg vurderte selvfølgelig å lage en åpnere og konfigurerbar løsning så flere kunne implementere dette på sine servere, men jeg følte meg litt i det egoistiske hjørnet. ;) Hvis Google gir meg en skikkelig fetch-funksjon så jeg slipper å bruke stygge triks skal jeg muligens revurdere saken…

Antispamgreie

Kan alle linke hit? Riktignok er det vel relativt fort gjort for store aktører å legge inn unntak for det domenet, men inntil da… :P

Edit: Jeg vil heller oppfordre folk til å melde seg inn i Project Honeypot hvis de har en hjemmeside.

Vedlikehold

Der har jeg endelig fått fjerne den teite feilmeldinga som har vært på pMedia.no et par måneder. Det sparket bak jeg trengte var at samme feilen oppsto på hjemmesida mi også. :P Av og til får fila som teller besøk for en side størrelse 0, og det synes ikke PHP-Update noe særlig om. Var ikke mer arbeid enn å slette fila. :)

Og så vil jeg minne på om at diktsamlingen stadig utvides. Sist ute er “Den vi er”, som jeg dessverre egentlig har verken tittel eller forfatter på…

Edit: Det er et sitat fra skuespillet “Art” av Yesmina Reza.

Ellers er det travelt på jobb for tiden. Det blir liksom så mye ekstra planlegging når man ikke har undervist før og er veldig oppsatt på at ting MÅ bli riktig.

Til helga er Kjersti bortreist, så da stikker jeg ut og drukner rastløsheten min litt. ;)

Valggjennomgang

I den siste tiden har jeg fulgt med Mathias Rongveds gjennomgang av partiprogrammene på bloggen hans, “Slik jeg ser det”. Dette anbefaler jeg til alle, det gir en fin oversikt over partiprogrammene. :) Nå kan min fornøyelse også selvfølgelig skyldes at han og jeg virker veldig like politisk sett, men pyttsann! ;)

Jeg har også flytta spilleserveren min over til en skikkelig publiseringsløsning. Det ble riktignok ikke så pent å bare flytte designet rett over, så jeg må se om jeg får tid å lage et penere design til den etterhvert…

Sommerjobben

Jeg har verdens beste sommerjobb. :) Det er virkelig morsomt å gå på jobb når man jobber med ting man brenner for. :)

Min største oppgave hittil er et adresseregister med mulighet for både og sende mail og flette adresseetiketter til søkeresultatet. Avhengig av hva jeg holder på med akkurat nå kan registeret være tomt. Dere vil uansett bare se de oppføringene som er markert som “offentlige”, og det er ikke så mye enda. Jeg holder på å lage et enormt regneark med gamle lister som skal importeres. Skikkelig drittjobb å gå gjennom et TRE-sifret antall word-dokumenter med gamle adresselister. :-s

Det morsomste hittil var at jeg “måtte” lære meg AJAX for real-time oppslag av postnumre. Jeg var overrasket over hvor enkelt det var å bruke XMLHttpRequest i JScript, tror det tok meg litt over en halvtime å få funksjonaliteten på plass. Antakelig kunne jeg brukt litt lenger tid om jeg hadde brukt den litt mer kompatible metoden å gå via en iframe-tag. Opera før 7.60 støtter ikke XMLHttpRequest, men der valgte jeg den feige løsninga å enable tekstfeltet og vise en liten notis om hvorfor. Ja, jeg lagrer poststedet i tekstformat foreløpig, og jeg vet enkelte synes det er fy-fy. :p

PMedia

Der har endelig Pedersen Mediaconsult fått sine nye sider lansert! Er selv ganske stolt av resultatet. Mulig jeg skal legge til et kontaktskjema etterhvert, vi får se…

Tormod etterlyste litt info om kostholdet jeg beskrev i forrige post, og en liste finnes her. Men jeg har ikke finlest lista i småbiter, men har funnet de verste faktorene (yoghurt, godterier/brus, brødmat, poteter) og erstattet disse (fiberrik knekkebrød, frokostblanding, frukt, salat, fullkornspasta osv). Jeg har ikke hatt brød i huset på 2 måneder snart. :)

Endelig Mozilla-kompatibel!

Fikk ikke noen inside-tips akkurat, men jeg fant selv en artikkel (anbefales for de som vil lære seg CSS-posisjonering) som satte meg på riktig spor. En del nettlesere bruker en slags “tilgi feil”-modus så lenge !DOCTYPE-taggen din ikke linker til DTD-formatet for HTML’en du bruker. Når jeg la til link (se koden for denne sida f.eks) fikk jeg plutselig Mozilla-feilen i SAMTLIGE nettlesere. Noe som jo tydet på at feilen var min og ikke Mozillas. :p Etter mye om og men lærte jeg enda mer om CSS og fikk endelig sidene til å se identiske ut i Mozilla Firefox 0.8, Internet Explorer 6 og Opera 7.50pr3. :)