I last changed the bug list in December 2000, when Opera 5 was released.
Opera 4 was a disaster. It's best forgotten completely. Fortunately Opera redeemded itself by the next major version.
Fact sheet:
Opera 4 was quite ambitious. It was produced for Windows, Mac, Linux, BeOS, OS/2 and Epoc. Style sheet support is excellent, as should be expected from Opera, but that's the only positive point of this browser.
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.
There were so many bad points in Opera 4's JavaScript support that I created a separate bug list. Meanwhile Opera 5 has been released, so I offer this list only for historical reasons.
First of all some items that worked fine in Opera 3 but don't work in Opera 4:
<INPUT NAME="thename">Instead it required an ID, both in the HTML and in the JavaScript. Although this is in fact a correct implementation of the standards, Opera fails to provide backward compatibility with NAMEs in forms. Thus it makes sure that common form validation scripts won't work in Opera 4. This won't help to give them a larger share of the market.
Opera says:
"the event variable passed to event handlers does not match the javascript standard"
What does this mean? Why don't they give information on how the event variable works instead of telling us
how it doesn't work?
Incomplete information.
Opera claims that it supports a limited number of new DOM methods and properties on elements with absolute position. These claims are incorrect more often than not in Opera 4. Opera 5 fulfills most of the claims.
I set up a test page with as basic HTML:
<P ID="test">A paragraph with an ID.</P>
and as basic CSS:
#test {position: absolute; top: 100px; left: 100px; background: #00cc00; }
This is what happened:
Claim | Example script | Opera 4 | Opera 5 |
---|---|---|---|
Opera does not claim to support top and left, but in fact the browser supports these properties and their changing. | var x = document.getElementById('test').style; x.top = 150; |
Yes | |
Setting and getting of visibility |
var x = document.getElementById('test').style; x.visibility = 'hidden'; |
Yes | |
Setting and getting of pixelLeft and pixelTop | var x = document.getElementById('test').style; x.pixelLeft = 100; |
No | Yes |
Setting and getting of pixelWidth and pixelHeight | var x = document.getElementById('test').style; x.pixelHeight = 10; |
Buggy. The background conforms to the new width/height, but the actual content stays where it is. | |
Setting and getting of zIndex | var x = document.getElementById('test').style; x.zIndex = 20; |
No | Yes (note) |
Setting and getting of color and background. | var x = document.getElementById('test').style; x.background = "#ffffff"; x.color = "#ffffff"; |
No | Yes |
getElementById | var x = document.getElementById('test'); alert(x.id); |
Yes | |
getElementsByTagName | var x = document.getElementsByTagName('p'); |
No | |
getElementsByName | var x = document.getElementsByName('test')[0].style; x.color = "#ffffff"; |
No | Yes |
contains() Note: I don't know this method, but it is supported in Explorer 5 and not in Netscape 6. |
var x = document.getElementById('test'); if (x.contains) alert('Yep'); else alert('Nope'); |
No | Yes |
parentNode | var x = document.getElementById('test'); y = x.parentNode; y.style.visibility = 'hidden';I put an extra DIV with absolute position around the paragraph. |
Dunno exactly. The assignment of x.parentNode to y works, but the visibility change gives an error. | Yes |
z-index: Opera can't place two layers exactly on top of each other.