Version 4 browsers


On this page I describe the Version 4 browsers. They are those browsers supporting DHTML but none of the techniques of the higher browsers.

iCab | Netscape 4 | Escape 4 | Explorer 4 | Opera 4 | Omniweb | Opera 5 | Opera 6
Introduction | Version 2 browsers | Version 3 browsers | Version 5 browsers


Last major update: 24 April 2003. Tested version: 2.9.1.

This new independent browser for the Mac is still in development. Eventually it's going to become a commercial browser, but all previews are free.
If iCab crashes, it may help to trash the iCab Preferences from your Preferences folder and have iCab create a new one.

Note that you may have to switch on JavaScript on. iCab calls it InScript, by the way. One definite problem is the bad quality of JavaScript error messages. Usually you can't find out where your script goes wrong.
To make up for this iCab introduced the special debug() method. It writes a message to the InScript console. This can be very useful.

if (self.debug) // support detect
  debug('Error message written to console');

The promises of flawless CSS support have started to come true. There's still something wrong with style sheets on table elements (usually they don't work), no a:hover yet but the rest seems pretty much OK. For more information on iCab's CSS capabilities, see MacEdition.

iCab supports both the Level 1 DOM and Microsoft's document.all, just like Explorer 5 does. Even better, iCab now supports some DHTML. No absolute positioning yet, but it does support the navigation: display script that I use in this site, and also the changing of text colour. It doesn't yet support visibility/invisibility but I suppose that will be added in the next release.

This browser is still very much in development, and the going it slow, but it looks better and better with every release.

Netscape 4


When it was released, it looked as if Netscape 4 was to continue the Netscape tradition of truly innovative, high quality browsers. And, true, as long as you coded your sites for the Version 3 browsers, Netscape 4 was a delight to work with. You could even add a little bit of CSS, giving an extra touch for the Version 4 users. Netscape 4 supported layers and it was whispered that the layers could do real DHTML, although no one as yet knew exactly what this was good for.

Now that we pass into the Version 4 Era and want to do real things with layers instead of just playing games, the weaknesses of Netscape 4's architecture become very clear, both because the DOM is fundamentally too complicated and because its implementation is buggy (see the DOM page for more information). The more CSS/DHTML pages I write, the more quirks and problems I encounter.

Netscape 4.5 and 4.6 were by far the worst: they had a huge chance to crash on anything going beyond some simple scripts and simple style sheets. Fortunately Netscape has released several 4.7x versions, each one of which is slightly better than the previous one. The newest is Netscape 4.76 . These versions will give you less trouble than the preceding ones.

First and most important: Netscape 4 on Windows can crash on heavily styled and layered pages. I had terrible problems with this site (see the History) because I wanted to have a complicated DHTML page in the navigation frame. First I thought the page crashed on the old display script. I removed the script almost immediately, but three months later turned out that Netscape 4 might crash on the border declarations in the style sheet. When I removed the border declaration I received a few mails from glad users who could once again enter my site without crashing immediately.

Furthermore, Netscape 4 can lose some bits of the style sheet on several occasions.
This is worst on the Mac, where Netscape simply disregards the style sheet after the user resizes the window.
Netscape 4 on Linux is less likely to crash than the Windows version, but it doesn't support quite as much style declarations either. Furthermore, support for some events is missing.
Netscape 4 on Windows can also lose bits of style information on a resize (background color for instance), but of the three it is the most uncompromising: either it crashes or it shows something decent.

Setting the page margins to zero is difficult. Just

body {margin: 0px;}

doesn't work. The trick is:

body {margin:-10px 0 0 -10px}
html body {margin:0}

The -10px solve the Netscape 4 problems, and the html body syntax, which Netscape 4 doesn't understand, overrules the negative margin in all other browsers.

As to DHTML, Netscape 4 cannot change the style of an HTML object, as Explorer can. So you can change the font, background colour and even the border of a paragraph in Explorer 4 and 5, but not in Netscape 4.

But let's stress that the lack of quality only resides in the CSS and the overall architecture. Netscape 4's JavaScript capabilities are excellent and especially the quality of its Error Messages are a blessing to the weary scripter. From Netscape 4.06 onwards, the good old JavaScript Error Message Alert has been discontinued and replaced by the JavaScript console. You can now type javascript: in the location bar to start the console.

However, it's possible to either get the old error messages or to have the JavaScript console open whenever an error occurs. In both cases you have to edit the file prefs.js which resides somewhere in your Netscape 4 folder. Close Netscape, add either of these two lines to the file, then start Netscape again:

For traditional error messages:


For automatic opening of the console:


See also for a good article on JavaScript debugging.

In short, Netscape 4 is the weakest of the Version 4+ browsers on Windows, despite its excellent JavaScript. It will soon acquire a status not unlike Explorer 3 used to have: the browser it's hard to code for. As the number of Netscape 4 users has started its inevitable decline, people will go to less and less trouble to write Netscape 4-friendly pages. The only thing that can save Netscape is the speedy release of a good Netscape 6.

For Linux, however, Netscape 4 remains the only browser, and on the Mac it still has a strong (and deserved) position. Explorer 4 on Mac is incomparably worse than Netscape 4, but with Explorer 5 Microsoft has finally produced a good Mac browser. Nonetheless, Netscape 4 retains a larger share than the Explorers combined.

Netscape 4 also exists for OS/2 and several flavours of Unix. I tested the Solaris version and found little difference with the Windows version.

In total, roughly 15 % of the users still work with Netscape 4, though this number will decline rapidly in the months to come. For the moment, however, it is necessary to check your site in Netscape 4 and calmly accept the stress that comes with it.

Escape 4

Espial Escape is a commercial Java browser that tries to emulate Netscape 4. In fact, it succeeds to a remarkable degree. It supports the old document.layers DOM and really seems to have taken over Netscape's layer model in its entirety. As a token of this commitment, it is the only non-Netscape browser that doesn't have 'compatible' in its browser string.

Unfortunately its interface leaves rather a lot to be desired. Although it looks quite OK, you cannot copy any text from the browser window to another application. In fact, the whole 'Edit' menu is missing. It doesn't offer any JavaScript control or error messages, either.

Style sheet support is OK, though it doesn't support background colours in TD's. It supports slightly more declarations than Netscape 4, for instance display: list-item.

As to DHTML, Escape supports it well enough. There's something wrong in the DHTML example, though. Here Escape refuses to change the visibility, while in the Display and visibility test page it works fine. Neither does it change the colour of the text, but since Netscape 4 doesn't either it fits with the emulation.
It doesn't support the display navigation either, faithfully following Netscape 4's example.

An interesting case is the writing into layers script. Here I write a P with the class of the surrounding DIV into the DIV. The reason is that in Netscape 4 the DIV loses all style information when you write something to it. However, this doesn't happen in Escape with the result that the styles (in my case a border) are shown twice.
So this is a case of Escape being not buggy enough. No doubt there will be more such examples, emulating Netscape 4 is not something for the fainthearted.

Some more JavaScript problems are that it doesn't support the Last modified script, that it crashes on the frames exercise and several minor points. Since this browser is not really used, I don't (much) care.

I don't think it's a good idea to emulate Netscape 4. This buggy browser is on the way out. Therefore the document.layers specific code will not be added to sites any more, making DHTML impossible in Escape. The only way to avoid this would be to release a Version 5 browser.

Explorer 4

With Explorer 4, Microsoft finally produced a good browser. It is much slower in loading pages than Netscape 4, but it is more stable, more standard-compliant and has better CSS capabilities. Admittedly, at first I did not see these qualities, being a Netscapie at heart and still dazzled by the heady promise of Netscape 4. But now that I start to code for Version 4 browsers, I must state the sad and sorry truth: Explorer 4 is a better browser than Netscape 4, at least on Windows.

That's not to say that Explorer is perfect. Far from it. As soon as you start doing DHTML with absolutely positioned elements, you'll notice that Explorer 4 has the gravest difficulties with anything but a <DIV> tag. This is partially balanced by the fact that it was the first browser to support a:hover, one of my favourites among the CSS declarations.

I heard, but did not test, that Explorer 4 can crash on the CSS declaration clear: both.

Its JavaScript is at par with Netscape 4, so that cross-browser scripting has become a whole lot easier. One definite downside of Explorer 4 is the incomprehensible JavaScript Error Messages it produces. If you're tweaking a bit of code for Explorer 4 by means of the error messages, you're out of luck because chances are you'll never find out exactly what is wrong.


Unfortunately, Explorer 4 for the Mac is worse than the Windows variant. Especially its style sheets are downright buggy. It has grave trouble with width declarations of elements inside other elements. For instance, if you want something to span an entire table and give it width: 100%, Explorer 4 on Mac interprets this as '100 % of the entire page', stretching it up to the width of the page and creating a horrible effect.

Its JavaScript is OK, although there are some minor glitches like it not supporting the auto scroll script. To make up for this, there are serious problems with the Flash implementation. I once read (but did not try) that Flash movies should always be in the same directory as the referring page to prevent slashes in the Flash path.

Nonetheless, Microsoft is slowly learning to make a good browser for the Mac. Some problems that I noted earlier have disappeared now that I test this site on Explorer 4 on Mac again. In former times, the navigation on the left was hideous on the Mac, but all of a sudden it almost looks as on Windows, except that the paragraphs are too close to each other. Progress indeed.

Windows CE

The Windows CE PDA's have Pocket Internet Explorer installed on them. This browser is roughly compatible with Explorer 4. I haven't yet studied it, but I found a link to a short JScript introduction at the MSDN site. PIE does not support VBScript because of memory considerations.

Explorer 4 is used by roughly 15 % of the users. Its share is slowly declining, since Microsoft now only offers Explorer 5.

Opera 4

Opera is busy making a Version 4 for Windows, Mac, Linux, BeOS, OS/2 and Epoc. The BeOS build is in Beta, the Linux, Mac and OS/2 builds are in Alpha. The Windows and Epoc versions are supposed to be 'final' but I doubt whether anyone wants to use the Windows one. I'm certainly not going to pay for it. Opera 4.02 is the most recent build.

Style sheet support is excellent, as should be expected from Opera.

A positive point: in this release something in the treatment of frames has changed. Until now, if you were in a frames site and hit Reload, the whole frameset was reloaded so you went back to the homepage. Now, Opera reloads the pages that are actually in the frame. This is great for testing purposes.

An excellent addition are the JavaScript error messages. You'll have to switch them on, because the default is off. Preferences (Alt+P) => Plugins => Enable scripting language error messages. Unfortunately the error messages give only the page, not the line number so it remains vague exactly what the error is.

However, there are a lot of bad points. At one point I was so irritated about Opera and so many things goinmg wrong that I decided to maintain bug list for Opera 4. Meanwhile Opera 5 has been released, so we can see Opera 4 as nothing more than a bad dream.

As to Opera 4 on Linux, I've decided to ignore it and to wait until Opera releases an official Version 5 browser for this OS. The last betas didn't want to start up on my test computer and neither I nor the guy working on that computer have time to do something about it.

This site no longer supports Opera 4. Don't expect any compatibility information. No one uses it anyway, in my statistics there are more Opera 3 than 4 users.


Last major update: 11 June 2003. Tested version: 4.2. Discussed but not tested: 4.5.

Omniweb is a browser made only for Mac OSX. It is commercial: a license costs $30. For the moment I doubt whether it's worth your money.

The newest version is OmniWeb 4.5 . I've heard, but not tested, that from now on OmniWeb will use Apple's rendering engine, the same one that drives Safari. This presumably means that Safari and OmniWeb have become one browser when it comes to JavaScript and CSS.


OmniWeb 4.2 notes:

One extremely annoying bug is that when you use the Back button, or Cmd+Arrow Left, OmniWeb reloads the entire frameset of this site, even though I just want to go back to the previous page in the content frame.

CSS support is OK, which means that the worst bugs have been fixed. See MacEdition for more information.

Omniweb used to say that "our JavaScript document object model does not fully emulate Internet Explorer's yet". This crucial sentence has been changed to "Our JavaScript document object model does not fully emulate Mozilla/Netscape Navigator's yet". Interesting, interesting...

The worst JavaScript problems have been solved. The 4.1 release finally supported the onSubmit event handler, so that form validation works. However, the construct

window.onload = function () {

doesn't. There's still a lot of work to be done in event handling.

As to popups, Omniweb is still muddled. OmniWeb 4.2 finally supports the opener property. Unfortunately there is still something wrong in my cross-window communication example. But some progress is being made.

On the other hand Omniweb offers a great functionality to only allow popups when you click on a link (Omniweb => Preferences => JavaScript).

Basic DHTML is supported, which is a minor miracle since OmniWeb doesn't seem to correctly support any advanced DOM. My test script says that it supports document.layers, but it but doesn't actually implement the complete Layers model. Images inside layers, for instance, cannot be reached through document.layers['layername'].images[].

4.1 claimed to support document.all, but 4.2 doesn't claim this any more. Very, very odd.

All in all Omniweb is getting somewhat better, but it continues to be an extremely confusing browser.

Opera 5

Instead of releasing Opera 4.03, Opera had chosen to give its new browser a new version number. Also, it has made Opera 5 completely free as long as you put up with the ads. Since you can select your ads preferences yourself, this just may be a good idea and people may actually like the browser. Of course, you can still pay to get rid of the ads.

The newest version is 5.12, I haven't found any major differences with earlier 5 versions.
One excellent thing is that Opera has finally produced correct Specifications of what the browser supports. Earlier versions appeared to reflect plans rather than reality, but by now the documents seem to actually describe the browser. I haven't found any errors yet.

It almost seems as if someone from Opera has viewed my bug list for Opera 4, most issues have been solved. In addition the JavaScript error messages have become better, actually giving a clue as to what's wrong. Line numbers have been implemented in 5.02, but they don't seem to follow the lines of the HTML document yet. So some progress has been made, but lots more needs to be done.

The minor security bug that I found in Opera 4 has been solved in Opera 5.02 . Now it is as safe as Netscape 6: you cannot read out or change anything in frames or windows that contain pages from another server.

Opera 5 once again recognizes NAME's of form fields, so form validating scripts work once again. Sensible decision! It can handle my example Window manipulation script. Also Opera 5 supports a lot more inline event handlers than before.

It even focuses on a popup, something Opera until now steadfastily refused to do. However, versions before 5.12 had an obscure error that made them crash on the View Location link in my direct writing example. I filed a report on this bug, it has disappeared.

In addition, Opera has added a very handy property that allows you to detect Opera 5 with 100% certainty:

if (window.opera)
	// browser is Opera, do something

Does not work in lower Opera versions, but it's very useful in separating Opera from other W3C DOM compatible browsers.

Although Opera 5 supports the W3C DOM and neither of the proprietary ones, it should be clear that it doesn't support the entire W3C DOM, but only enough to offer DHTML access to web developers. Its DHTML functionality is now somewhere in between Netscape 4 and Explorer 4. For Opera, this is a major step forward. Better still, everything seems to actually work without fuss.

Style sheet support is excellent, as usual, although Opera doesn't yet support clipping. This is high on my personal wish list because it's the only important style declaration from the Version 4 browsers that's still missing.

Of course there are still a few bugs:

In short, Opera is back on the right track with this release. I hope that the new browser will find lots of customers and that it'll conquer a bit of market share.


As said before, Opera is busy extending itself to other operating systems than Windows. Beta 5 of the Mac version has been released.

Opera on Mac was the first release to support general event handlers so that my image protection script worked fine. Unfortunately this has changed in beta 5: the script now only works on a left-click, while that should be the only case in which it should not work. I'm not yet sure if this is my fault or a browser bug.

The focus problems with form fields have been fixed and the Date and time bug that made Opera run one hour in advance of system time is gone, too (though daylight saving time may also be involved, and my previous test was in summer).

On the other hand the eternal problem of Dynamic options have not been solved yet: now the script works but you have to hide the select box before the changes take effect.

CSS: All text is being displayed smaller than the CSS definition calls for. (It has been argued that this is in fact a correct implementation of the W3C pixel definitnion. I think this is indeed the case, but that Opera nonetheless has to conform itself to the other browsers, since it should support the de-facto px definition.)
I have the feeling that this problem is being addressed, the text seems to be larger than in the previous beta.

Anyway, on Mac, too, Opera is coming along fine. The few bugs mentioned above will no doubt be solved soon and the final release will be a good competitor for Netscape and Explorer.


In general the Linux beta still has the minor bugs the Windows version used to have (like not allowing a focus on a popup). I don't have much more to say, the Linux port seems to be at the level of Opera 5.0 beta Windows now, and that's pretty good. So I suppose the last bugs will be removed shortly and Opera will become a serious competitor for Netscape and Konqueror on Linux.

Opera 6

Once again Opera has released a new full version of its browser for Windows (final release) and Linux (Technology Preview 2). Although I'm not entirely sure if a new major version is called for, the browser has certainly been improved. The user interface has been upgraded, it is now also possible to use multiple windows, as most other browsers do. You can also stick to the old way and keep all Opera windows in one. In my opinion the design is much more 'Maccy' (not a bad thing).

Two excellent JavaScript improvements are the inclusion of window.print(), so that programmatically printing a page is now possible, and the support of all offset properties (see the Window manipulation page for more information).

Further testing proved that general event handlers (like document.onmousedown = functionname;) are present in Opera 6 and have been integrated earlier (I haven't been paying enough attention to say exactly in which version). Strangely the Image protection does not work correctly: the script fires only on a normal single left click, which is the only kind of click that should be allowed. I'm not yet sure if this is an Opera bug or my mistake.

The visibility bug (value was upper case) has been solved. Unfortunately external JavaScript files are still not refreshed when you hit Reload. You still have to use the workaround outlined above.

Opera 6 does recognize hashes in links, but only when you use [link element].hash. It doesn't turn up in [link element].href. Still buggy.

Opera has clearly taken much trouble to make its browser more Microsoft compatible. Support for the document.all DOM has been added and also in event handling Opera 6 supports many Microsoft property names (though also the W3C ones).

The Linux version has one strange bug: my Banner rotation script works much too fast: banners are being switched several times per second. Obviously this should be a setTimeout() problem, but it isn't (at least, not a simple one), since my Sticky menu script, which also heavily relies on timeouts, works fine. Strange case...

As to iframes, though Opera 6 supports them and allows JavaScript access to them, they don't work well within layers. When I used a lot of visible/hidden layers and one of them had an iframe, the iframe was initially visible, even though the layer it was in was hidden. Besides, all of a sudden Opera refuses to access the iframe, even though without layers it works fine.

See the Opera Omnibus for some nice Opera-only CSS bugs.

All in all Opera continues to improve its product, although I'd really love to see clipping and the changing of display to be supported: these are the only major items still missing. Let's continue to hope.