Apologies in advance for this relatively lengthy post!
I would like to bring up a fairly serious issue with the Firefox 2.0
release - Support for modal windows.
One of the most classic methods for enabling users of a windows based
system (like X-Windows, MAC, MS Windows, etc.) to understand the
context in which they are working has been to create a popup dialog
that is modal to the opening window. These modal dialogs are often
nested and can be seen in depth and are exceptionally good for UI
reuse and tunneling. Applications which support multiple environments
have used this technique to simplify configuration and current user
context as long as there have been windowing development environments.
This interaction style is extremely useful, well understood and quite
prevalent.
As of 6 months ago, every serious programming platform (including
browser clients such as FF 1.x+ and IE 4.x+) supported modal (or
nearly modal) windows.
With the release of Firefox 2.0 we have lost all modal and popup
window control (including window z-order control, window dependency
control and cross window event control). Based on a small bugzilla
analysis
https://bugzilla.mozilla.org/show_bug.cgi?id=354123
https://bugzilla.mozilla.org/show_bug.cgi?id=180048
https://bugzilla.mozilla.org/show_bug.cgi?id=197351
https://bugzilla.mozilla.org/show_bug.cgi?id=292598
it appears that this was done to prevent the use of popup windows in
offensive ways. While I understand and applaud the concern that went
into the decision to prevent this behavior, the particular
implementation decisions taken were just plain WRONG.
One of the themes that comes up with modal windows is the statement
and presumption that the browser and all windows that are a part of
the browser belong exclusively to the user on the client machine. As
a philosophical point, this is probably accurate, but as a practical
matter, it is dubious for both historical and user interaction
reasons. Popup blocking is standard behavior for all browsers now and
well understood. Simply asking users about allowing modal windows is
MORE than sufficient to correct problems in poorly behaved sites.
Several workarounds have been proposed to this issue. Here are a few
I have researched and attempted with varying degrees of success.
1) Create an extension to overload a javascript class that opens a
modal dialog in chrome code. This actually works to some extent, but
severely limits the inter window communication (parent and child
follows
are particularly annoying here).
2) Sign your pages and request permissions from the user. This one is
probably the most frequently recommended solution and also the least
useful. Note that the problem is not obtaining a certificate and
asking for permission (which itself is a problem for some customers),
but the fact that creation of a signed jar containing all content is
simply not possible for dynamically created content. Guess who
needs the modal dialogs the most? The complex and dynamically created
web applications being deployed publicly and in intranets.
3) Utilize local div elements to cover the primary page and create
javascript dialogs. This solution can work very well for single and
small dialogs and for contexts which are very shallow, but is not
tenable for larger systems and multiple levels of dialogs. Each new
dialog must fit within the real estate of the last dialog and you lose
resizability and standard chrome. An additional issue here is that
without the use of iframes you are unable to break the name space to
prevent reuse of variables and context variables within shared
javascript modules (not everything is using javascript class
methodology.
4) Change the user interaction to use a single page with alternative
context (such as bread crumbs or similar). This COULD be done,
particular for simple applications but large teams with systems with
years of development effort simply can not change this in reasonable
time frames and are likely to simply ignore firefox rather than make
the significant investment to do this. Most of the interactions that
will work with single windows are very low in contextual content and
unlikely to be implemented for complex configuration withing DHTML
implementations.
I would like to recommend a solution that may be gather some flames...
"Implement the non W3C DOM compliant function showModalDialog() and
showModelessDialog() currently found in IE."
Why?
- The firefox browser would instantly be able to use 'standard' code
written for IE that has been well and thoroughly tested for nearly 10
years.
- Firefox has implemented similar non-compliant behaviors for
compatibility reasons in the past (innerHTML comes to mind).
- Developers can rapidly convert to this method and understand it
well.
Additionally, the popup blocking logic should be extended to
explicitly query for z-order and modal dialog control to ensure that
poorly behaved sites are prevented from causing problems of this type.
As Firefox 2.0 now stands, public facing applications and a large
block of high end web applications can not support it completely. In
particular, banking systems, financial systems, reservation systems
and complex web applications may need to explicitly PREVENT the use of
Firefox 2.0 to ensure correct behavior of their applications in
deployed environments. Firefox does not have the usage percentage to
force interaction design changes in these environments... it is a
battle the Mozilla Firefox team will LOSE... and that would be a
shame.
I would really like to hear some response to this from the Mozilla
team. This problem won't go away just because you want to ignore it.
I suspect you are already seeing this just from other posting and
bugzilla activity.
Thanks for any feedback and responses (in advance).
jbk