Opera 4

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.

Bug list

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.

New errors

First of all some items that worked fine in Opera 3 but don't work in Opera 4:

  1. Opera 4 doesn't support TITLE's on links any more. In my mind, TITLEs are very important for making a site accessible. They can be used for giving extra information about a link. Besides, all modern browsers (except for Netscape 4) support them, so Opera can't stay behind, certainly not if it worked fine in Opera 3.
    Solved in Opera 5.
  2. Also, support of the opener necessary for cross-window JavaScripting is scanty. In one series of tests it worked, in another it didn't and Opera even crashed.
    Solved in Opera 5.
  3. Opera 4 has a brand new minor security bug: you can read out the location of frames and windows that don't come from your server. For more information on why this is a security bug, see the Frame Busting page.
  4. Opera 4 has made an (I think) wrong decision with the names of form elements. The form printing script doesn't work at the moment because Opera 4 no longer recognizes
    <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.
    Solved in Opera 5.
  5. There is an as yet unexplained bug in my cross-frame mouseover script. I moved the pre-loading script from the navigation page to the index page: Opera couldn't execute the script any more and gave error messages. Not sure what's causing it; for the details see the source of the frameset.
    The script works fine in all other browsers.
    Solved in Opera 5.

Event Handling

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.

DOM Errors

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:

ClaimExample scriptOpera 4Opera 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

Notes

z-index: Opera can't place two layers exactly on top of each other.