Skip to main content

How can you control window focus in Firefox?



I'm trying to open a pop-up window but keep the opener window in focus. This is pretty easy in everything except Firefox.





This will suffice for most browsers:







window.open('gets-opened.html', '', 'width=600,height=400,status=0,scrollbars=1,toolbar=1,menubar=1,resizable=1,location=1');

window.focus();







In Firefox, the opened window maintains focus. I realize that there is a setting for Firefox to allow JavaScript to "raise or lower" windows and that this is disabled by default.





I have seen sites that are able to get around this, though. Kayak is one example. When you select other providers to compare against from their search, the new windows go behind the main window, even with "raise or lower" windows disabled.





How are they getting around this? I realize that this is a security measure to prevent annoying pop-unders, but it seems odd that, from a pop-up window opened on the same domain, I can change the HTML in the opener window through JavaScript, but not give it focus.


Comments

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...