[js] try en ie4

Pagina: 1
Acties:

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
hoi,

heb een klein javascriptje dat alleen voor 'moderne' browsers zou moeten werken. hiervoor heb ik een if(document.getElementById) toegevoegd.
in het script gebruik ik oa een try/catch constructie, en ondanks dat ie4 dit helemaal niet mag lezen (staat immers een if omheen) krijg toch steeds de foutmelding van een scripterror in ie4.

ook al is ie4 (en ondersteun ik het enkel middels een onopgemaakte website, lang leve stylesheets :)) toch zou ik het wel fijn vinden als ik deze error op een of andere manier kan voorkomen. is dit mogelijk en zo ja, hoe?

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


Verwijderd

Je zou het try-catch blok kunnen verbergen voor IE4 door het in een eval() te zetten. Misschien niet zo mooi, maar volgens mij werkt het wel.

if(document.getElementByID){
eval('try{}catch(e){}');
}

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:45

crisp

Devver

Pixelated

De manier om vroeger bepaalde scriptblokken van een latere javascript versie te verbergen was door het toevoegen van een language="javascript1.x" aan de script-tag. IE4 gebruikt dat mechanisme nog, en ondersteund meen ik t/m javascript 1.3. als je dus een language="javascript1.5" oid gebruikt zou IE4 het ook moeten overslaan.

Intentionally left blank


Verwijderd

Als je language="JavaScript1.5" gebruikt, wordt het ook genegeerd door IE5 en IE6.

Je zou het wel kunnen proberen met language="JavaScript1.3", dit wordt in ieder geval gewoon uitgevoerd in IE5 en IE6.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Het aantal IE4 gebruikers is geloof ik nog kleiner dan eht aantal NS4 gebruikers.. is het echt de moeite daar tijd aan te besteden?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:45

crisp

Devver

Pixelated

Verwijderd schreef op 17 april 2004 @ 11:46:
Als je language="JavaScript1.5" gebruikt, wordt het ook genegeerd door IE5 en IE6.

Je zou het wel kunnen proberen met language="JavaScript1.3", dit wordt in ieder geval gewoon uitgevoerd in IE5 en IE6.
Gecombineerd met een type-declaratie slaat IE6 'm niet over hoor (IE5 moet je maar even testen):
HTML:
1
<script type="text/javascript" language="JavaScript1.5">


IE4 ondersteund volgens mij juist al wel "javascript1.3" net als de laatste NS4 versies. "javascript1.5" voldoet aan ECMA v3 en het klopt dat IE die nog steeds niet volledig geimplementeerd heeft (mijn bijbel zegt van wel, dat JScript5.5 fully compliant is, maar ik weet o.a. dat finally in errorhandling bijvoorbeeld niet geimplementeerd is, en zo zijn er nog wel meer manco's)
Voor de volledigheid: "javascript1.4" heeft voor browserimplementaties nooit bestaan ;)

[ Voor 21% gewijzigd door crisp op 17-04-2004 12:01 ]

Intentionally left blank


Verwijderd

Het lijkt me dat IE6 bij het beoordelen van de gebruikte scripttaal eenvoudigweg het language attribuut negeert zodra er ook een type attribuut is opgegeven.

Het volgende werkt namelijk ook gewoon in IE6:
type="text/javascript" language="pietjepukscript1.5"

Als IE4 hetzelfde gedrag vertoont - niet getest overigens - is het niet een geschikte oplossing.

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
net geprobeerd met een versie nummer erbij
HTML:
1
<script language="JavaScript1.5" src="./scipt.js" type="text/javascript"></script>


maar ie4 geeft nog steeds de foutmelding. geen echte oplossing dus.

dat zelfde geldt voor het eval() voorstel wat gedaan wordt, aangezien er zo'n 10 regels code binnen try{} staan.

iemand anders nog ideeen?

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:45

crisp

Devver

Pixelated

BetuweKees schreef op 17 april 2004 @ 12:47:
net geprobeerd met een versie nummer erbij
HTML:
1
<script language="JavaScript1.5" src="./scipt.js" type="text/javascript"></script>


maar ie4 geeft nog steeds de foutmelding. geen echte oplossing dus.

dat zelfde geldt voor het eval() voorstel wat gedaan wordt, aangezien er zo'n 10 regels code binnen try{} staan.

iemand anders nog ideeen?
ja, ideeen zat, maar bij gebrek aan een IE4 hier om het te kunnen testen, en het feit dat het niet boeiend meer is tegenwoordig maken dat ik er eigenlijk zelf ook geen tijd in wens te steken ;)

Het enige waar je nog wel naar zou kunnen kijken is of je het mischien zonder try-catch instructie zou kunnen stellen; ik kan me bijna geen situatie voorstellen - tenzij je heel gekke dingen doet of je het voor een soort van optimalisatie gebruikt - waarbij je het niet anders op zou kunnen lossen.

Intentionally left blank


Verwijderd

Je zou het ook nog zo kunnen proberen:

<script type="text/javascript">

if(document.getElementById){
document.write('<scr' + 'ipt type="text/javascript" src="script.js"></scr' + 'ipt>');
}

</script>

Ik zie trouwens niet in waarom die tien regels in het try blok een probleem zouden vormen bij m'n eerste oplossing.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:45

crisp

Devver

Pixelated

persoonlijk vind ik dit type afvragingen ook best wel ranzig:

JavaScript:
1
if (document.getElementById) { }


als een browser hierop geen function-object teruggeeft zal hij undefined teruggeven en geen false of iets wat strict gezien naar false kan worden geevalueerd. Dit dien je trouwens niet te verwarren met de top-level property undefined die eigenlijk 'unassigned' zou moeten heten ;)
Gelukkig is javascript niet zo strict, maar in andere talen zal je hiervoor afgestraft worden. In javascript wordt undefined gelijk gezien aan null (note: niet strict gelijk!), en die cast wel naar false.
Dit is m.i. de nette manier:

JavaScript:
1
if (typeof document.getElementById != 'undefined') { }


verder blijf ik erbij dat je beter kan kijken of je de try-catch weg kan laten dan nog ranzigere oplossingen te gaan verzinnen ;)

Intentionally left blank

Pagina: 1