popup focus() behaviour with moz, firefox, ie

A

Alex.Svetos

Hello,

I'm trying to get a popup to keep focus when it is re-clicked.
The script below is supposed to produce this exact behaviour,
however it doesn't work, at least on firefox 1.0.7 and moz 1.7.12
(linux kubuntu). It does work with konqueror.
It seems to work with firefox on windows but not with IE (not completly
sure though).


<script type="text/javascript">
var WindowObjectReference = null; // global variable

function openFFPromotionPopup()
{
if(WindowObjectReference == null || WindowObjectReference.closed)
/* if the pointer to the window object in memory does not exist
or if such pointer exists but the window was closed */

{
WindowObjectReference =
window.open("http://www.spreadfirefox.com/",
"PromoteFirefoxWindowName",
"resizable=yes,scrollbars=yes,status=yes");
/* then create it. The new window will be created and
will be brought on top of any other window. */
}
else
{
WindowObjectReference.focus();
/* else the window reference must exist and the window
is not closed; therefore, we can bring it back on top of any
other
window with the focus() method. There would be no need to
re-create
the window or to reload the referenced resource. */
};
}
</script>

(...)

<p><a href="http://www.spreadfirefox.com/"
target="PromoteFirefoxWindowName"
onclick="openFFPromotionPopup(); return false;"
title="This link will create a new window or will re-use
an already opened one">Promote Firefox adoption</a></p>


The weird thing is... it is copied from
http://developer.mozilla.org/en/docs/window.open#Examples !

I must mention that i've activated javscript and allowed it to control
focus with firefox and even disabled bpopup blocking, but it didn't
helped :(, neither did the many variante i've found on the web or in
this newsgroup.

I'm really clueless, but i'm just catching up with javascript so i hope
i've missed an obvious point.




So if anyone
 
T

Thomas 'PointedEars' Lahn

thx a lot ah

My first followup probably was not enlightening enough ;-)

The reason why what you are trying to do is a Bad Thing:

<URL:http://www.faqs.org/faqs/x-faq/part7/section-42.html>
(This is about programming for the X Window System, but I'm sure you get the
idea anyway.)

Focusing the window most certainly does not work with your Gecko-based
UAs because there are Preferences with which the user can prevent you
from "stealing" the focus, that are enabled by default. Too many
clueless script-kiddies have attempted this in the past.

Please provide attribution of quoted material next time:

<URL:http://jibbering.com/faq/faq_notes/pots1.html>
<URL:http://www.safalra.com/special/googlegroupsreply/>


PointedEars
 
A

Alex.Svetos

Thomas 'PointedEars' Lahn a écrit :
My first followup probably was not enlightening enough ;-)

The reason why what you are trying to do is a Bad Thing:

<URL:http://www.faqs.org/faqs/x-faq/part7/section-42.html>
(This is about programming for the X Window System, but I'm sure you get the
idea anyway.)

Focusing the window most certainly does not work with your Gecko-based
UAs because there are Preferences with which the user can prevent you
from "stealing" the focus, that are enabled by default. Too many
clueless script-kiddies have attempted this in the past.

You certainly didn't read my post, i'm not trying to get a popup
constantly on top as you say, but simply to get it on top again when
you click on the main page link.
Once again the preferences to allow it are set in firefox.

Both of your replies are disrespectfull.
 
A

ASM

(e-mail address removed) a écrit :
You certainly didn't read my post, i'm not trying to get a popup
constantly on top as you say, but simply to get it on top again when
you click on the main page link.

Was your post very understanding ?
"I'm trying to get a popup to keep focus when it is re-clicked."
which is a non sens : if popup is clicked it has/get focus

So what we'll remember except 'keep focus' ?
(bad thing to do)

The script you've given is (allmost) correct and have to run as is
- a new popup on 1st call
- same popup comming to front with next calls
Once again the preferences to allow it are set in firefox.

I never fix preferences to stop all popups, only those comming automaticaly.
How to imagine you did stop all popups.
Both of your replies are disrespectfull.

Not first one
Please try to re-read yourself.
 
T

Thomas 'PointedEars' Lahn

Thomas 'PointedEars' Lahn a écrit :

You certainly didn't read my post,

Certainly I could not read your thoughts.
i'm not trying to get a popup constantly on top as you say,

| I'm trying to get a popup to keep focus when it is re-clicked.

You will excuse me if "keep" reads as "constantly" to me.
but simply to get it on top again when you click on the main page link.
OK.

Once again the preferences to allow it are set in firefox.

Sorry, I missed that.
Both of your replies are disrespectfull.

No, it was not. Besides, respect has to be earned, and you got what you
paid for.

Besides:

| The weird thing is... it is copied from
| http://developer.mozilla.org/en/docs/window.open#Examples

MDC is a Wiki, so anybody can post nonsense there (and partially did in this
case). However, the code you have posted (which is not necessarily the
code you are using) works here (provided _all_ prefs are set accordingly).

There can be several reasons why it would not work with you. Try
to find them out by debugging the code. See also the lower part of


Score adjusted

PointedEars
 
C

Csaba Gabor

I'm trying to get a popup to keep focus when it is re-clicked.

As you understand by now, this statement of the problem is
incorrect. Rather, you are trying to have a previously created
popup regain focus when a link or button activating it is
clicked.
The script below is supposed to produce this exact behaviour,
however it doesn't work, at least on firefox 1.0.7 and moz 1.7.12
(linux kubuntu). It does work with konqueror.
It seems to work with firefox on windows but not with IE (not completly
sure though).

Indeed, this is a classic case of protectionism run amok.
IE and FF both let you create a named window which they will bring to
the top, especially provided that it was some user instigated
through some user initiated action, such as clicking.

To be clear, this is not a case of a window/app trying to
raise itself to the top. The main window is already at the top,
so if it wants to have a child window come to the top (which may
be viewed as part of the same (already in focus) application),
which it could do anyway with window.open, what is the problem
in allowing window.focus()?

That is to say, it makes eminent sense that if a window, B,
which was created by window A, comes to the top upon creation,
that the same window B should come to the top upon a user
initiated action leading to windowB.focus() The really silly
way around this is to close windowB and then recreate it, which
only serves to drive up internet traffic.

This problem and two ways of dealing with it on FF are described at
https://bugzilla.mozilla.org/show_bug.cgi?id=318535
If you agree with the assessment, I suggest voting for the bug
to give it more visibility.

Unfortunately, I don't know of a nice workaround (other than the
brute force method in the bug report) for my IE 6 on Win XP Pro.
IE will flash the tab at the bottom of my window, but that's a
poor substitute for bringing it to the top.

Csaba Gabor from Vienna
 
G

Gérard Talbot

Thomas 'PointedEars' Lahn a écrit :


You certainly didn't read my post, i'm not trying to get a popup
constantly on top as you say, but simply to get it on top again when
you click on the main page link.
Once again the preferences to allow it are set in firefox.

Such preference and control is entirely up to the user if he finds the
setting and understand how good or bad the setting can be for his web
experience. Chances are that a very wide majority of users won't know
what "Raise or lower windows" implies and means, so they will trust the
default Firefox setting and will not allow your script to bring back the
secondary window when clicking the link again.

I am personally against the current default value. I tried to educate
the people on what that setting means.
See
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting
But then again, if the content is important to be read, seen, then I do
not recommend that you use a secondary window.

Thomas 'PointedEars' Lahn is abrasive, arrogant, even hostile at times
but he's right about not relying, not hoping too much on a focus() call
to work, at least, all the times. It's all up to the user in the final
instance. And, if your webpage design is sound, accessibility-oriented,
then even users with "Raise or lower windows" unchecked should be able
to access your content without a problem. Chances are that if you follow
the usability guidelines and recommendations given at
http://developer.mozilla.org/en/docs/DOM:window.open
then the user will know there is another secondary window and
tab-capable browser users will not open your document in a secondary
window but most likely into a tab.

Gérard
 
G

Gérard Talbot

Csaba Gabor wrote :
As you understand by now, this statement of the problem is
incorrect. Rather, you are trying to have a previously created
popup regain focus when a link or button activating it is
clicked.


Indeed, this is a classic case of protectionism run amok.
IE and FF both let you create a named window which they will bring to
the top, especially provided that it was some user instigated
through some user initiated action, such as clicking.

It's not that simple. A secondary window could have been brought up
legitimately; after some time, it could be reloaded with advertisement
content. Or who knows; a second click on a link could load a different
document. There are lots of possibilities, variations which a persistent
scripter could take advantage of.
To be clear, this is not a case of a window/app trying to
raise itself to the top.

A setTimeout can do that though.
Some people create a modal window with
<body onblur="self.focus();">
you see.

The main window is already at the top,
so if it wants to have a child window come to the top (which may
be viewed as part of the same (already in focus) application),
which it could do anyway with window.open, what is the problem
in allowing window.focus()?

The window is not per se the problem: its content (actual, future,
potential) is. When a browser prevents an unrequested popup, it's not so
much the window that is the problem as it is its content (advertisement,
spamming content, annoyance of being served scam ads or anything which
is not related to the reasons to visit a site in the first place).

If you visit some sites like netscape.com and yahoo.com, they are now
using DHTML layers to convey advertisement. No secondary windows
involved. But the same boring, annoying advertisement pollution.
That is to say, it makes eminent sense that if a window, B,
which was created by window A, comes to the top upon creation,
that the same window B should come to the top upon a user
initiated action leading to windowB.focus() The really silly
way around this is to close windowB and then recreate it,

There are scripts available on the web that do exactly that: as the user
reclicks the link, the script closes windowB and then recreate it entirely.

See the 9th link at
https://bugzilla.mozilla.org/attachment.cgi?id=149849&action=view

which
only serves to drive up internet traffic.

This problem and two ways of dealing with it on FF are described at
https://bugzilla.mozilla.org/show_bug.cgi?id=318535
If you agree with the assessment, I suggest voting for the bug
to give it more visibility.

The bug hasn't even been confirmed yet!
And the bug is about respecting and maintaining user settings when
upgrading Fx.
Unfortunately, I don't know of a nice workaround (other than the
brute force method in the bug report) for my IE 6 on Win XP Pro.

How about simply not using window.open() if your content is important
for the users to read, otherwise warn accordingly users about a
secondary window and do not rely too much on such window.open() +
window.focus() call.

Gérard
 
C

Csaba Gabor

Gérard Talbot said:
Csaba Gabor wrote :

It's not that simple. A secondary window could have been brought up
legitimately; after some time, it could be reloaded with advertisement
content. Or who knows; a second click on a link could load a different
document. There are lots of possibilities, variations which a persistent
scripter could take advantage of.

I'm not quite following your scenario and objection (advantage taking
mechanism). Are you referring to:
1) Window A brings up named window B, and then A or B later reload B
(which they are entitled to do)
2) Window A brings up named window B, and then a different window C in
the same domain loads up B with new content. So at this point, is
either A, B, or C allowed to (or ought to be allowed to) do a .focus()?
3) Window A brings up named window B, and then a different window C in
a different domain loads up B with new content.
4) Something else.

It would be nice if you would clarify specific scenario(s) that you
have an issue with that the popup blocker does not protect against (ie.
how could a persistent scripter take advantage?).
A setTimeout can do that though.
Some people create a modal window with
<body onblur="self.focus();">
you see.

I like this because it's a specific instance that we can discuss.
Woudn't it make sense to have window/self.focus() labor under the same
restrictions as window.open? In other words, it has to be initiated by
a physical user event within a certain time limit to have any effect.

To go on a bit of a digression, the kind of behaviour you have
mentioned can be achieved by an infinite loop of alerts. A solution to
this would be to have FF always allow the underlying window to be
closed (by, for example, clicking on its X button in the upper right
corner or by having a context menu for close on the right click if the
X is not visible).
The main window is already at the top,
The window is not per se the problem: its content (actual, future,
potential) is. When a browser prevents an unrequested popup, it's not so
much the window that is the problem as it is its content (advertisement,
spamming content, annoyance of being served scam ads or anything which
is not related to the reasons to visit a site in the first place).

If you visit some sites like netscape.com and yahoo.com, they are now
using DHTML layers to convey advertisement. No secondary windows
involved. But the same boring, annoying advertisement pollution.

This is off topic for this thread. I hate those kinds of ads, too.
However, opposition to popups has its basis in the fact that the user
chose to look at a website in a given window, and that window is all
the website is entitled to, except under limited circumstances (user
initiated actions). However, this argument does not apply to the
content of the web page itself. That browser window is the website's
playground and if they want to annoy users by placing ads, that's their
prerogative. That's what GreaseMonkey helps with.
There are scripts available on the web that do exactly that: as the user
reclicks the link, the script closes windowB and then recreate it entirely.

See the 9th link at
https://bugzilla.mozilla.org/attachment.cgi?id=149849&action=view

What is the id of the associated bug ... How do I use the search page
at
https://bugzilla.mozilla.org/query.cgi to figure out the bug associated
with a given attachment number?
And by the way, what is the bug that you are referring to in your last
post in
http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/78d28fdaac54b3c/
The link is broken.

Anyway, I am not fond of this idea of killing windows one is going to
reuse just to get them to the top.
which

The bug hasn't even been confirmed yet!

What is your point?
And the bug is about respecting and maintaining user settings when
upgrading Fx.

That is half the bug. But it is also about allowing window.focus() to
focus a window that the caller has rights to.
How about simply not using window.open() if your content is important
for the users to read, otherwise warn accordingly users about a
secondary window and do not rely too much on such window.open() +
window.focus() call.

I have a web app for rapid development/prototyping. You put the input
source material into a textbox in one window, press alt+s and up pops
the result in the second window. For this type of scenario it makes
sense for the content to be delivered to a second window and for the
second window to remain where it is and for the second window to rise
to the top. Any kind of per instance warning is not a solution.

The user could always allow scripts to raise or lower windows (by the
way, would you happen to know the corresponding pref.js setting?), but
that allows access for any script. I am only suggesting that in
situations where window.open would raise a new window to the top, there
is nothing that is lost by allowing window.focus() to do the same.
 
G

Gérard Talbot

Csaba Gabor wrote :
I'm not quite following your scenario and objection (advantage taking
mechanism). Are you referring to:
1) Window A brings up named window B, and then A or B later reload B
(which they are entitled to do)
2) Window A brings up named window B, and then a different window C in
the same domain loads up B with new content. So at this point, is
either A, B, or C allowed to (or ought to be allowed to) do a .focus()?
3) Window A brings up named window B, and then a different window C in
a different domain loads up B with new content.
4) Something else.

It would be nice if you would clarify specific scenario(s) that you
have an issue with that the popup blocker does not protect against (ie.
how could a persistent scripter take advantage?).

I was thinking of scenario 2 where document loaded in window A can
focus() document #3 in window B after being loaded.
I like this because it's a specific instance that we can discuss.
Woudn't it make sense to have window/self.focus() labor under the same
restrictions as window.open? In other words, it has to be initiated by
a physical user event within a certain time limit to have any effect.


Yes, it would make sense to have focus() work under the same
restrictions as window.open().

To go on a bit of a digression, the kind of behaviour you have
mentioned can be achieved by an infinite loop of alerts.

Exactly. I happened to have demonstrated this in 2002 in a netscape7
newsgroup.

A solution to
this would be to have FF always allow the underlying window to be
closed (by, for example, clicking on its X button in the upper right
corner or by having a context menu for close on the right click if the
X is not visible).

An alert is a modal window; not any kind of normal secondary window. You
can not reach the parent-opener without first closing the modal window.
The modal window's opener can not be focused without first closing the
modal window.
This is off topic for this thread. I hate those kinds of ads, too.
However, opposition to popups has its basis in the fact that the user
chose to look at a website in a given window, and that window is all
the website is entitled to, except under limited circumstances (user
initiated actions). However, this argument does not apply to the
content of the web page itself. That browser window is the website's
playground and if they want to annoy users by placing ads, that's their
prerogative. That's what GreaseMonkey helps with.

It may not be that off topic. I was merely pointing out that it is
unwanted polluting content that annoy us. Put it into a DHTML layer or
in a window: in both cases, the users' system resources are used and
abused to annoy the users.
What is the id of the associated bug ... How do I use the search page
at
https://bugzilla.mozilla.org/query.cgi to figure out the bug associated
with a given attachment number?

Titlebar or source code were indicating
And by the way, what is the bug that you are referring to in your last
post in
http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/78d28fdaac54b3c/
The link is broken.

I restructured my website recently. I will eventually remove all
references to NS 7.

What does the "Raise or lower windows" setting do exactly?
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting

Anyway, I am not fond of this idea of killing windows one is going to
reuse just to get them to the top.

I certainly do not either: it's really a bad idea, abusing the users'
system resources.

What is your point?

My first point is that this bugreport is not well done and second point
it's not the correct bugreport to vote for if you want "Raise or lower
windows" to default to true, to have the default to allow scripts to
Raise or lower windows.
That is half the bug. But it is also about allowing window.focus() to
focus a window that the caller has rights to.

A bugreport should always about 1 single issue per bug. And it should be
terse, clear and as clean as possible. In other words, no rant, no long
lecture. Bugzilla is not a newsgroup discussion forum, a place for
advocacy or debates, actually. It's only a place to report, investigate,
then confirm, test patches, fix bugs.
I have a web app for rapid development/prototyping. You put the input
source material into a textbox in one window, press alt+s and up pops
the result in the second window. For this type of scenario it makes
sense for the content to be delivered to a second window and for the
second window to remain where it is and for the second window to rise
to the top. Any kind of per instance warning is not a solution.

The user could always allow scripts to raise or lower windows (by the
way, would you happen to know the corresponding pref.js setting?),

dom.disable_window_flip


but
that allows access for any script. I am only suggesting that in
situations where window.open would raise a new window to the top, there
is nothing that is lost by allowing window.focus() to do the same.


Gérard
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top