Since its incarnation, browser compatibility has been an issue with JavaScript. This listing attempts to cover some of the bugs, missing features, and new features that JavaScript has endured since version 1.0.

You'll find two sections here: Features and Bugs. The first section documents browsers' support for most of JavaScript's features; the second section documents the bugs, inconsistencies, or oddities of JavaScript features on a browser by browser basis.

JavaScript Features
  Nav 2 Nav 3 Nav 4 IE 3 IE 4
applets
access to java
No Yes Yes Yes1 Yes1
areas
image maps
No Yes Yes No Yes
Array
create arrays
No Yes Yes Yes Yes
css
control css
No No Yes2 No Yes
cookie
browser's cookie
Yes Yes Yes Yes* Yes
Date
time/date
Yes Yes Yes Yes Yes
event
xtra event info
No No Yes3 No Yes3
external scripts
with src attr
No Yes Yes No4 Yes
forms
general forms
Yes5 Yes Yes Yes*,5 Yes
frames
control frames
Yes Yes Yes Yes Yes
history
page history
Yes Yes Yes Yes* Yes
images
control images
No Yes Yes No9 Yes
javaEnabled
detect java
No Yes Yes No Yes
links
control links
Yes Yes Yes Yes Yes
location
control location
Yes6 Yes Yes Yes*, 6 Yes
Math
math operations
Yes Yes Yes Yes Yes
navigator
browser info
Yes Yes Yes Yes Yes
mimeTypes
mime types
No Yes Yes No No
options
control select
menu options
No Yes Yes No No
String
create strings
Yes Yes Yes Yes Yes
window
control window
Yes7,8 Yes8 Yes Yes*,7,8 Yes8
write
write html
Yes* Yes* Yes Yes Yes

JavaScript Bugs
  Bug Description
IE 4
Still in "preview release"
   
IE 3
Cookies
Though IE 3 allows JavaScript access to cookies, the feature is disabled offline. So to work with cookies and JavaScript in IE 3, put your files on a server first.

Form's Action
You cannot change ACTION property of a form in IE 3 through JavaScript.

Form's Target
You cannot change TARGET property of a form in IE 3 through JavaScript.

Frames
While Navigator 2 bases the path of a frame's location on the URL of the frame that contains the controlling script, IE 3 bases the path on the URL of the target frame. For example, in Navigator 2, parent.B.location = "index.html" in frame A will result in frame B loading "index.html" in frame A's directory. Doing the same in IE 3 results in frame B loading "index.html" in frame B's directory.

Location
There are a few oddities with the location property in IE 3.0. First, using the javascript: protocol to go to a URL with location will result in nothing; the location of the window will not change. This is fixed in IE 3.01. Second, sometimes location cannot be accessed properly, so location.href should be used at all times.

Referrer
If the user gets to a page by following a link, the page's document.referrer property will return the url of the page that linked to it. In IE 3, the current page is always returned.

Windows
IE 3 has a few bugs dealing with windows. When you open a window using the open() method, the first parameter (for the url of the new window's document) will be ignored. Because of this, you must assign the location afterwards. Another bug deals with the opener property. When you open a new window, the new window is given a property, opener, which points to the window that opened it. There is no opener propery in IE 3.0. Both of these problems are fixed in IE 3.01.

   
Nav 4
CSS
There are a few problems with Navigator 4's CSS implementation (in relation to JavaScript). First, when you attempt to write to the DIV tags that surround an absolutetly positioned element, you will not recieve an error, but the content of the element will be cleared. Second, in complex layering situations the hidden and visible values for the visibility property will not work, and you will have to revert to the LAYER tag's hide and show values.
   
Nav 3
Tables
Navigator 3 has problems displaying JavaScript generated HTML (made with document.write()) inside tables. If you create a nested table (a table within a table) and try to put JavaScript generated HTML within it, either your code will be displayed or nothing will be displayed. Second, if you put certain JavaScript generated form elements within tables and then resize the window, the code will be displayed on the page and the table will "splurge" its contents.

*implementation buggy or incomplete, see bugs table
1access to ActiveX too, but no java api calls
2Nav only allows pre-display control, except with positioning
3the event model is improved, but it's different in IE and Nav
4external scripts supported in IE 3.01, but not 3.0
5no support for reset()
6no support for replace()
7no support for scroll(), focus(), blur()
8no support for moveTo(), moveBy(), resizeTo(), resizeBy()
9IE 3 for the Mac supports the image object

Code:

Questions:

Comments: