Browser version incompatibility is the biggest problem. It requires knowing how each scriptable
browser version implements its object model. You see, the incompatibility rarely has to do with the
core JavaScript language (although there have been improvements to the language over time); the bulk
of incompatibility issues have to do with the object models that each browser version implements. For
example, scripters who started out with Navigator 3 implemented the image rollover because it looked
cool. But they were dismayed to find out that the image object wasn't scriptable in Internet Explorer 3
or Navigator 2. While there are easy workarounds to make this feature work on newer browsers
without disturbing older ones, it was a painful learning experience for many.
The second biggest can of worms is scripting connections between multiple windows. A lot of scripters
like to have little windows pop up with navigation bars or some such gizmos. But the object models,
especially in the older browser versions, don't make it easy to work with these windows the minute you
put a user in front of them--users who can manually close windows or change their stacking order.
More recently, a glitch in some uninstall routines for Windows 95 applications can disturb vital parts of
the system Registry that Internet Explorer 4 requires for managing multiple windows. A scripter can't
work around this problem, because it's not possible to detect the problem in a user's machine. I tend to
avoid multiple windows that interact with each other. I think a lot of inexperienced Web surfers can
also get confused by them.