JavaScript open in a new window, not tab
Asked Answered
K

15

406

I have a select box that calls window.open(url) when an item is selected. Firefox will open the page in a new tab by default. However, I would like the page to open in a new window, not a new tab.

How can I accomplish this?

Kennethkennett answered 7/4, 2009 at 17:23 Comment(3)
see example at "jsfiddle.net/HLbLuSquamosal
possible duplicate of Open a URL in a new tab using JavaScriptSteinbok
You can use github.com/reduardo7/xpopupDesman
S
511

Specify window "features" to the open call:

window.open(url, windowName, "height=200,width=200");

When you specify a width/height, it will open it in a new window instead of a tab.

See https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Position_and_size_features for all the possible features.

Satiate answered 7/4, 2009 at 17:32 Comment(19)
Good tip. I think Opera will still open this in a tab though :).Redeploy
Doesn't think it works in FF or Chrome (beta versions of both though, dunno about behavior for non-beta).Gustaf
It should work in Firefox (I checked before posting); haven't tried Chrome. And yeah, it's by no means a solid cross-browser solution; the whole situation is kind of a mess.Satiate
question references firefox, not any other browserStrategic
This is correct, although there are certain non-default browser settings (Safari 5 has one, for example) that blocks even this (it instead opens in a new tab and ignores the specified size).Burden
Working in IE6, FF 3.6, Chrome 9.0Champerty
Doesn't work any more in FF 11.0, see my question! @JamesHardy
Doesn't work in today's browsers. By default they all open a new windows in a new tab of current window. It also depends on browser options. You cannot control it using JavaScript.Sherrylsherurd
This it at least not true for Opera and maybe other browsers and should not be relied onSnowberry
This will not work in IE 11 if you set it to open new windows in a new tab instead.Steinbok
This is NOT the fact you put "height=200,width=200" which perform opening in a new window. This is simply the fact to put extra parameter (location, status etc.... it doesn't matter)Lethe
Works in Chrome 51 but not FF 47. Just do not rely on it.Grasshopper
This did not work for me, testing with FF 51. nwbrad's answer below still works.Francium
I agree with @Lethe as it not only works when you specify the height and width rather it will work always whenever there is a third parameter. I tested it with 'titlebar=yes' and it opens a new window and when i remove 'titlebar=yes' it opens a new tab.Juliajulian
width and height are not enough and not even necessary in newer Chrome versions. You need to specify menubar=no to be able to open on a popup.Berton
This still works in 2020, but make sure you are not using MacOS fullscreen mode. Then no matter what, the link will open in a new tab.Newark
Don't work on Safari... Everybody is tired of popups. FF OK Opera OK Chrome OK I don't even heard about Edge :DJovita
@Berton window.open(url, windowName,"args"); works too... Except on Safari (MacOS).Jovita
As per documentation, open(url, target, windowFeatures). This works for me: window.open(url, "_blank", "popup"); You can add in windowFeatures the position, height, width... or let the browser decide.Tramel
S
127

You don't need to use height, just make sure you use _blank, Without it, it opens in a new tab.

For a empty window:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

For a specific URL:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
Suspense answered 23/2, 2010 at 3:28 Comment(5)
But what if i want to give it a name as well?Vladi
At least in Chrome, location=0 is necessary when the JS is invoked from a button or anchor element.Judaize
worked perfectly. had to include location=0 as well in firefox.Brigham
@Suspense are you sure about the '_blank' part because as far as I know '_blank' is the default value when we don't specify any other value. In your case, opening a new window instead of a new tab has to do something with providing the 3rd parameter to window.open function. In your case it is 'toolbar=0,location=0,menubar=0'. You can verify it by omitting this third parameter and leaving '_blank' there as the 2nd parameter.Juliajulian
Works perfectly in in modern browsers like Firefox 76 and Internet Explorer 11. The tip is adding location=0 in the parameters. I would also suggest naming the window instead of using using the _blank target, so that the same window is used again if the user clicks several times the element that opens the popup, and chaining with focus() so that already an opened popup gets the focus : window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();Mcdowell
D
89

I may be wrong, but from what I understand, this is controlled by the user's browser preferences, and I do not believe that this can be overridden.

Discourse answered 7/4, 2009 at 17:26 Comment(14)
You are right, the user can set the "about:config" preference "browser.tabs.opentabfor.windowopen" to true, but that is a global setting and I do not want to change the global behavior of our users browsers ;)Kennethkennett
I told you I have code that works. I typed this into firebug console: window.open("", "poop", "height=200,width=200,modal=yes,alwaysRaised=yes"); and guess what??? it works!!!!!!Strategic
Yes it works, but this seems to be a bit of a hack. Firefox is written in such a way that opening a new window vs tab is a browser preference, not a javascript preference. Therefore it is feasible that your suggestion wont work the same in a later version of firefox. I'd rather not rely on a hack.Kennethkennett
And to be clear, I don't mean it's a javascript hack. Adding window height and width are clearly features of the js window.open method (w3schools.com/HTMLDOM/met_win_open.asp) I mean hack in the sense of manipulating the intended behavior of firefox.Kennethkennett
I wouldn't really call it a hack, per se. You're just compromising on what behavior you'd actually like to have, and implementing that, instead.Iow
As of FF5, the hacks on this page don't work, even if you have an exception in the configuration for your site. Works in Chrome 12, but not FF.Gelt
I think PPK has a better write-up on pop-ups than w3schools. quirksmode.org/js/popup.htmlOrlov
Just provide the width and height and it will become a popup instead of a tab.Eastbound
Well, guess what? It still works as of September 2012 in Firefox 15! And it works even without using "modal=yes". The "alwaysRaised=yes" attribute is enough to show a popup. I don't care if it stops working a few years later. It's not as if it would break or something. It would just show the content in a tab anyway so it's not a big deal. For now I prefer to show a popup for a PDF printing feature in my web app.Halette
@Strategic window.open("", "poop", "height=200,width=200,modal=yes,alwaysRaised=yes"); still opens a new tab in my Opera, because I have configured it to always open a new tab instead of new windows.Snowberry
It looks like different browsers implement the behavior of window.open in different ways, because IE 11 will still open the popup in a new tab if the user set's that as their browser preference. It doesn't seem to be standardized acros all browsers.Steinbok
I also believed this was controlled by the browser preferences, but see the trick of adding location=0 parameter when opening the window. It works and with it both Firefox 76 and Internet Explorer 11 renounce to use their popup blockers.Mcdowell
You're right, at some point, it used to be possible. Now it's possible only if you change your default settings, which kind of defies the purpose of new window being reliable if used as a site feature. I came across this post when doing research after finding this video here. Nowadays this is mostly handled by in-app own modal window.Flank
Edge, Chrome and Firefox all required me to allow popups before my page would appear, but it did open in a new window.Battlement
S
17

Try:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

I have some code that does what your say, but there is a lot of parameters in it. I think these are the bare minimum, let me know if it doesn't work, I'll post the rest.

Strategic answered 7/4, 2009 at 17:30 Comment(3)
This works in FF 31 and Chrome 36 using only the "modal=yes" option. All options specified work as well. I also have "Open new windows in new tabs instead" checked in my FF preferences. Without open options, windows open in new tab.Workshop
After some more testing, it seems almost any parameters―as long as there is at least one―will open a new window instead of a tab. For example just "top=0" even works in FF 31 and Chrome 36. This is on OpenBSD using the cwm window manager. So results may vary.Workshop
May i know, what is [window name]?Dull
L
12

OK, after making a lot of test, here my concluson:

When you perform:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

or whatever you put in the destination field, this will change nothing: the new page will be opened in a new tab (so depend on user preference)

If you want the page to be opened in a new "real" window, you must put extra parameter. Like:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

After testing, it seems the extra parameter you use, dont' really matter: this is not the fact you put "this parameter" or "this other one" which create the new "real window" but the fact there is new parameter(s).

But something is confused and may explain a lot of wrong answers:

This:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

And this:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

will NOT give the same result.

In the first case, as you first open a page without extra parameter, it will open in a new tab. And in this case, the second call will be also opened in this tab because of the name you give.

In second case, as your first call is made with extra parameter, the page will be opened in a new "real window". And in that case, even if the second call is made without the extra parameter, it will also be opened in this new "real window"... but same tab!

This mean the first call is important as it decided where to put the page.

Lethe answered 28/11, 2015 at 11:55 Comment(0)
S
9

You might try following function:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

The HTML code for execution:

<a href="#" onclick="open('http://www.google.com')">google search</a>
Swimmingly answered 26/1, 2011 at 22:59 Comment(2)
What is the purpose of the popup.location = URL;? The window.open() call should open it to the proper URL, and in your code example, URL is not defined so it is going to fall back to the experimental (and not widely support) URL object. While using it for that is debatable, I'm curious what the motivations are for its use here?Queeniequeenly
Solid answer and taught me how to make the location non-editable. thanksMachzor
G
7

You shouldn't need to. Allow the user to have whatever preferences they want.

Firefox does that by default because opening a page in a new window is annoying and a page should never be allowed to do so if that is not what is desired by the user. (Firefox does allow you to open tabs in a new window if you set it that way).

Gustaf answered 7/4, 2009 at 17:26 Comment(8)
you are so wrong. and by the way, saying "you shouldnt need to" is not appropriate, especially if it is something the boss wantsStrategic
Right, I could shift+click a hyperlink, but in this case window.open(url) is executed on the event of selecting a dropdown option. So that method doesn't work. Opening in a new window is an intentional part of the design specs.Kennethkennett
Lets try and keep the comments practical and helpful. We can disagree without being insulting.Kennethkennett
@theman_on_vista: Convincing your boss is your responsibility. Your company has bestowed on you the responsibility to resolve design issues. This includes pointing out wrong design ideas.Buzzard
So true. The screen belongs to the user, and no one else.Tammietammuz
I think window.open() should just popup confirmation dialog asking user "would u like to open with tab? or new window?" :DConcinnity
maximum inconvenience for everyone, masato-san? :)Lecythus
It is in the realm of the designer to choose popup or tab. While I am a user that always prefers tabs, I recognize that sometimes, the design really calls for a popup or really calls for a tab. It should be in the realm of the programmer to make it possible. Putting philosophical differences aside, this sort of comment is entirely inappropriate for a programming reference site. And in this case, it is not a "should I?" question. It is "how do I?"Crossstaff
C
6

The key is the parameters :

If you provide Parameters [ Height="" , Width="" ] , then it will open in new windows.

If you DON'T provide Parameters , then it will open in new tab.

Tested in Chrome and Firefox

Coursing answered 7/1, 2013 at 7:3 Comment(1)
newwin = window.open('test.aspx', '', ''); tested in Chrome: 26Coursing
F
6

I just tried this with IE (11) and Chrome (54.0.2794.1 canary SyzyASan):

window.open(url, "_blank", "x=y")

... and it opened in a new window.

Which means that Clint pachl had it right when he said that providing any one parameter will cause the new window to open.

-- and apparently it doesn't have to be a legitimate parameter!

(YMMV - as I said, I only tested it in two places...and the next upgrade might invalidate the results, any way)

ETA: I just noticed, though - in IE, the window has no decorations.

Footy answered 14/7, 2016 at 18:6 Comment(1)
window.open(url, windowName,"args"); works except in SafariJovita
K
6

For me the solution was to have

"location=0"

in the 3rd parameter. Tested on latest FF/Chrome and an old version of IE11

Full method call I use is below (As I like to use a variable width):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
Kellerman answered 13/11, 2018 at 17:26 Comment(0)
C
5

Interestingly, I found that if you pass in an empty string (as opposed to a null string, or a list of properties) for the third attribute of window.open, it would open in a new tab for Chrome, Firefox, and IE. If absent, the behavior was different.

So, this is my new call:

 window.open(url, windowName, '');
Carey answered 2/6, 2011 at 0:41 Comment(1)
Isn't the original poster trying to open popups in a new window though? Also, in IE 11, the code snippet you gave will open a new window or tab based on the user's browser preference.Steinbok
C
4

try that method.....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }
Chore answered 19/12, 2013 at 11:47 Comment(0)
F
1

Answered here. But posting it again for reference.

window.open() will not open in new tab if it is not happening on actual click event. In the example given the url is being opened on actual click event. This will work provided user has appropriate settings in the browser.

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

Similarly, if you are trying to do an ajax call within the click function and want to open a window on success, ensure you are doing the ajax call with async : false option set.

Fanfani answered 9/4, 2013 at 8:8 Comment(0)
M
1

I think its not html target properties problem but you unchecked "open nw windows in a new tab instead" option in "tab" tab under firefox "options" menu. check it and try again.

enter image description here

Midwinter answered 3/11, 2014 at 5:8 Comment(0)
B
1

I had this same question but found a relatively simple solution to it.

In JavaScript I was checking for window.opener !=null; to determine if the window was a pop up. If you're using some similar detection code to determine if the window you're site is being rendered in is a pop up you can easily "turn it off" when you want to open a "new" window using the new windows JavaScript.

Just put this at the top of your page you want to always be a "new" window.

<script type="text/javascript">
    window.opener=null;
</script>

I use this on the log in page of my site so users don't get pop up behavior if they use a pop up window to navigate to my site.

You could even create a simple redirect page that does this and then moves to the URL you gave it. Something like,

JavaScript on parent page:

window.open("MyRedirect.html?URL="+URL, "_blank");

And then by using a little javascript from here you can get the URL and redirect to it.

JavaScript on Redirect Page:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
Burletta answered 11/11, 2014 at 21:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.