Skip to the main content
[] 6. X. 2007.

IEZnam, znam, reći ćete ma tko još koristi ovaj browser. No, većina svijeta zna samo za IE i kad nabijaš neke stranice gledaš prvo da rade u tom pregledniku, a tek onda na ostalim browserima. Zato ću ovdje obraditi kusur caka tog komada softvera, čisto ono da napišem nekakav post u kategoriji Programiranje, sekciji u koju već dugo nisam ni piksel stavio. Pa eto.

• • •

Nekad je postojao jedan bug koji ga je rušio. Da se prisjetimo:

<input type crash>

Ali to je davno ispravljeno tako da će tek rijetkom korisniku koji nije 100 godina povukao update to zaista i srušiti IE. No, bug novijeg datuma, isto oneliner, koji moju šesticu još uvijek ruši je

<style>*{position:relative}</style><table><input></table>

IE6 pada ko kruška, dok je u sedmici ta stvar ispravljena.

Znate za onaj problem s opakim sadržajem kad neki html direktno okinete u browseru, bez servera i localhosta. U tulipanu morate svaki put posebno dozvoliti takvom sadržaju da se pokrene. E, nema više toga, otkrivena je tajna velike moći. U prvu liniju te vaše lokalne stranice jednostavno opizdite

<!-- saved from url=(0013)about:internet -->

I nakon toga browser se više ne buni zbog nepoćudnog sadržaja.

Novo Ajax doba uvelo je i neke nove probleme. Recimo keširanje. Dok ostali (neki) preglednici na tom polju kako tako rade prema očekivanjima, IE kešira requeste tamo di ih ne treba keširati. U slučaju kada imate nekakakv httprequest objekt, on mulja, tj. nepotrebno kešira isti:

self.xmlHttpReq.send(query)

Rješenje problema je da mu uprdite neki parametar random tipa koji će ga sjebati. Jedno od zbrda zdola rješenja išlo bi nekako ovako:

self.xmlHttpReq.send(query . "&prdonja=" + new Date().getTime())

A zadnja stvar koju vrijedi spomenuti je rješenje problema s layerom iznad select boxova. Zna zatrebati kad npr. otvarate nekakav meni preko selecta. Naime, izgleda da su njemu selectboxovi kao na visini plus beskonačno. Rješenje je vrlo zainmljivo: preko selectboxova prvo opičite jedan IFRAME, a nakon toga željeni DIV. Nešto kao:

<select>...</select>
<iframe style="pozicioniran iznad selectboxa">...</iframe>
<div style="pozicioniran iznad selectboxa">...</div>

Problem i solucija ilustrirani su ovdje.

Ovo možete nalijepit conditional komentarom koji kuži samo IE:

<!--[if IE]>
vaš kod ovdje
<![endif]-->

Ali bolje je to na serverskoj strani:

$user_agent = $_SERVER["HTTP_USER_AGENT"];
if(strpos($user_agent, "MSIE") !== FALSE && strpos($user_agent, "Opera") === FALSE)
{
    // vaš kod ovdje
}

(Jer, ne zaboravite, kad se Opera kao fejka kao IE ona još uvijek ostavlja traga u user_agent potpisu, pa da bar pokrijemo i taj slučaj.)

• • •

Naravno, moja priča o IE s ovim nije gotova, ima tu još specifičnih stvari, ali da ne meljem dalje. Počela je padati kiša, a imam jedno pivo za riješit. A tu je puno posla: treba napisati algoritam, ispraviti bugove, uvjeriti se da radi na nativnoj platformi i na kraju izvršit. Živili i uživajte u produženom vikendu.