Ik ben zo stom geweest om mijn site te ontwikkelen in Firefox en pas op het laatste moment te controleren in IE. Wat blijkt nu: als ik de site open in IE 4, 5 of 6 (op windows), krijg ik een error:
Dit werkt dus perfect behalve in IE 4, 5 en 6, zoals ik het begrijp omdat de head-tag nog niet is afgesloten op het moment dat ik script-tags als child eraan wil hangen. Zoals de tip hierboven aangaf, moet ik wachten totdat de hele DOM gerendered is, dus:
Maar dit werkt niet. De bestanden worden nu niet geinclude. (Ik weet dit, omdat als ik een alert() in bv. dom.js zet, deze niet omhoog komt als ik de pagina laadt). Mijn vraag is: wat doe ik verkeerd?
Na enig Googlen kwam ik erachter dat het een bug betreft. Onder andere Gary Haran legt uit:Internet Explorer cannot open the website http://192.168.0.3/test
Operation aborted.
In de head van mijn site roep ik 1 javascript bestandje aan: index.js. In dit bestand worden alle andere javascriptjes geinclude met de volgende code:Internet Explorer doesn’t like scripts appending elements to the existing DOM [before the tag has been closed] When Internet Explorer fails it fails spectacularly by shutting down the script engine and aborting page rendering. One way to circumvent the error is to wait till the entire page DOM has been rendered. You can do that with window.onload.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function include(sources) { var head = document.getElementsByTagName('head')[0]; for (i in sources) { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = sources[i]; head.appendChild(script); } } include([ 'system/dom.js', 'system/tools.js', 'system/ajax.js' ]); |
Dit werkt dus perfect behalve in IE 4, 5 en 6, zoals ik het begrijp omdat de head-tag nog niet is afgesloten op het moment dat ik script-tags als child eraan wil hangen. Zoals de tip hierboven aangaf, moet ik wachten totdat de hele DOM gerendered is, dus:
JavaScript:
1
2
3
4
5
6
7
| window.onload = function () { include([ 'system/dom.js', 'system/tools.js', 'system/ajax.js' ]); } |
Maar dit werkt niet. De bestanden worden nu niet geinclude. (Ik weet dit, omdat als ik een alert() in bv. dom.js zet, deze niet omhoog komt als ik de pagina laadt). Mijn vraag is: wat doe ik verkeerd?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."