The Window
interface's open()
method loads the specified resource into the browsing context (window, <iframe>
or tab) with the specified name. If the name doesn't exist, then a new window is opened and the specified resource is loaded into its browsing context.
var window = window.open(url, windowName, [windowFeatures]);
url
DOMString
indicating the URL of the resource to be loaded. This can be a path or URL to an HTML page, image file, or any other resource which is supported by the browser. If the empty string ("") is specified as url
, a blank page is opened into the targeted browsing context.windowName
DOMString
specifying the name of the browsing context (window, <iframe>
or tab) into which to load the specified resource; if the name doesn't indicate an existing context, a new window is created and is given the name specified by windowName
. This name can then be used as the target of links and forms by specifying it as the target
attribute of <a>
or <form>
elements. The name should not contain whitespace. Keep in mind that this will not be used as the window's displayed title.windowFeatures
Optional
DOMString
containing a comma-separated list of window features given with their corresponding values in the form "name=value". These features include options such as the window's default size and position, whether or not to include scroll bars, and so forth. There must be no whitespace in the string. See Window features below for documentation of each of the features that can be specified.A Window
object representing to the newly created window. If the window couldn't be opened, the returned value is instead null
. The returned Window
reference can be used to access properties and methods of the new window as long as it complies with Same-origin policy security requirements.
The open()
method creates a new secondary browser window, similar to choosing New Window from the File menu. The strUrl
parameter specifies the URL to be fetched and loaded in the new window. If strUrl
is an empty string, then a new blank, empty window (URL about:blank
) is created with the default toolbars of the main window.
Note that remote URLs won't load immediately. When window.open()
returns, the window always contains about:blank
. The actual fetching of the URL is deferred and starts after the current script block finishes executing. The window creation and the loading of the referenced resource are done asynchronously.
var windowObjectReference; var strWindowFeatures = "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes"; function openRequestedPopup() { windowObjectReference = window.open("http://www.cnn.com/", "CNN_WindowName", strWindowFeatures); }
var windowObjectReference; function openRequestedPopup() { windowObjectReference = window.open( "http://www.domainname.ext/path/ImageFile.png", "DescriptiveWindowName", "resizable,scrollbars,status" ); }
If a window with the name already exists, then strUrl
is loaded into the existing window. In this case the return value of the method is the existing window and strWindowFeatures
is ignored. Providing an empty string for strUrl
is a way to get a reference to an open window by its name without changing the window's location. To open a new window on every call of window.open()
, use the special value _blank
for strWindowName
.
Note on the use of window.open to reopen an existing window with name strWindowName
: This functionality is not valid for all browsers and more with variable conditions. Firefox (50.0.1) functions as described: from the same domain+port reopen with same name will access the previously created window. Google Chrome (55.0.2883.87 m ) on the other hand will do it only from the same parent (as if the window was created dependent, which is the "opener"). This is a wide limitation and generates unbelievable complexity of development. Firefox (51.) gets the handle but cannot run any Element.focus() while Chrome can run focus() from opener to child but not between siblings nor, reverse, from child to opener. This function is the lonely key to get back the handle on a window if the developer has access only to its name (the name can be saved with cookies or local storage but not the window object handle). For now 10/01/2017 the differencies of behavior found recently have not still been tested for others Browsers.
strWindowFeatures
is an optional string containing a comma-separated list of requested features of the new window. After a window is opened, JavaScript can't be used to change the features. If strWindowName
does not specify an existing window and the strWindowFeatures
parameter is not provided (or if the strWindowFeatures
parameter is an empty string), then the new secondary window will render the default toolbars of the main window.
If the strWindowFeatures
parameter is used and no size features are defined, then the new window dimensions will be the same as the dimensions of the most recently rendered window.
If the strWindowFeatures
parameter is used and if no position features are defined, then the left and top coordinates of the new window dimension will be 22 pixels from where the most recently rendered window was. An offset is universally implemented by browser manufacturers (it is 29 pixels in IE6 SP2 with the default theme) and its purpose is to help users to notice new windows opening. If the most recently used window was maximized, then there is no offset: the new window will be maximized as well.
strWindowFeatures
(except titlebar
and close
, which are by default yes
).
Tip: If using the strWindowFeatures
parameter, only list the features to be enabled or rendered; the others (except titlebar
and close
) will be disabled or removed. Note that in some browsers, users can override the strWindowFeatures
settings and enable (or prevent the disabling of) features.
Note on position and dimension error correction
dom.disable_window_open_feature.menubar
to true in about:config or in their user.js file.dom.disable_window_open_feature.toolbar
to true in about:config or in their user.js file.dom.disable_window_open_feature.location
to true in about:config or in their user.js file. In Firefox 3, dom.disable_window_open_feature.location
now defaults to true, forcing the presence of the Location Bar much like in IE7. See bug 337344 for more information.
dom.disable_window_open_feature.personalbar
to true in about:config or in their user.js file.showModelessDialog()
method.dialog=yes
. If minimizable
is on, the new dialog window will have a minimize system command icon in the titlebar and it will be minimizable. Any non-dialog window is always minimizable and minimizable=no
will be ignored.fullscreen
always upsets users with large monitor screen or with dual monitor screen. Forcing fullscreen
onto other users is also extremely unpopular and is considered an outright rude attempt to impose web author's viewing preferences onto users.fullscreen
does not really work in MSIE 6 SP2.Window.opener
— it returns null
). In addition, the window.open()
call will also return null
, so the originating window will not have access to the new one either. This is useful for preventing untrusted sites opened via window.open()
from tampering with the originating window, and vice versa.noopener
is used, nonempty target names other than _top
, _self
, and _parent
are all treated like _blank
in terms of deciding whether to open a new window/tab.rel="noopener"
for more information and for browser compatibility details, including information about ancillary effects.Starting with Firefox 3, secondary windows are always resizable (bug 177838)
Tip: For accessibility reasons, it is strongly recommended to set this feature always on
dom.disable_window_open_feature.resizable
to true
in about:config or in their user.js file.Tip: For accessibility reasons, it is strongly encouraged to set this feature always on.
dom.disable_window_open_feature.scrollbars
to true in about:config or in their user.js file. dom.disable_window_open_feature.scrollbars
The following features require the UniversalBrowserWrite
privilege, otherwise they will be ignored. Chrome scripts have this privilege automatically, others have to request it from the PrivilegeManager.
UniversalBrowserWrite
privilege (bug 244965). Without this privilege, it is ignored.dialog
feature removes all icons (restore, minimize, maximize) from the window's titlebar, leaving only the close button. Mozilla 1.2+ and Netscape 7.1 will render the other menu system commands (in FF 1.0 and in NS 7.0x, the command system menu is not identified with the Firefox/NS 7.0x icon on the left end of the titlebar: that's probably a bug. You can access the command system menu with a right-click on the titlebar). Dialog windows are windows which have no minimize system command icon and no maximize/restore down system command icon on the titlebar nor in correspondent menu item in the command system menu. They are said to be dialog because their normal, usual purpose is to only notify info and to be dismissed, closed. On Mac systems, dialog windows have a different window border and they may get turned into a sheet.UniversalBrowserWrite
privilege (bug 180048). Without this privilege, it is ignored.Note: As of Gecko 1.9, the Internet Explorer equivalent to this feature is the window.showModalDialog()
method. For compatibility reasons, it's now supported in Firefox. Note also that starting in Gecko 2.0, you can use window.showModalDialog()
without UniversalBrowserWrite privileges.
dom.disable_window_open_feature.titlebar
alwaysLowered
.dialog
feature set). close=no
will override minimizable=yes
.dom.disable_window_open_feature.close
The position and size feature elements require a number to be set. The toolbars and window functionalities can be set with a yes or no; you can use 1 instead of yes and 0 instead of no. The toolbar and functionality feature elements also accept the shorthand form: you can turn a feature on by simply listing the feature name in the features string. If you supply the features parameter, then the titlebar
and close
are still yes by default, but the other features which have a yes/no choice will be no by default and will be turned off.
Example:
var windowObjectReference; // global variable function openRequestedPopup() { windowObjectReference = window.open( "http://www.domainname.ext/path/ImgFile.png", "DescriptiveWindowName", "width=420,height=230,resizable,scrollbars=yes,status=1" ); }
In this example, the window will be resizable, it will render scrollbar(s) if needed, if the content overflows requested window dimensions and it will render the status bar. It will not render the menubar nor the location bar. Since the author knew about the size of the image (400 pixels wide and 200 pixels high), they added the margins applied to the root element in MSIE 6 which is 15 pixels for top margin, 15 pixels for the bottom margin, 10 pixels for the left margin and 10 pixels for the right margin.
<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,scrollbars,status"); /* 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 above code solves a few usability problems related to links opening secondary window. The purpose of the return false
in the code is to cancel default action of the link: if the onclick event handler is executed, then there is no need to execute the default action of the link. But if javascript support is disabled or non-existent on the user's browser, then the onclick event handler is ignored and the browser loads the referenced resource in the target frame or window that has the name "PromoteFirefoxWindowName". If no frame nor window has the name "PromoteFirefoxWindowName", then the browser will create a new window and will name it "PromoteFirefoxWindowName".
More reading on the use of the target attribute:
HTML 4.01 Target attribute specifications
How do I create a link that opens a new window?
You can also parameterize the function to make it versatile, functional in more situations, therefore re-usable in scripts and webpages:
<script type="text/javascript"> var windowObjectReference = null; // global variable function openRequestedPopup(strUrl, strWindowName) { if(windowObjectReference == null || windowObjectReference.closed) { windowObjectReference = window.open(strUrl, strWindowName, "resizable,scrollbars,status"); } else { windowObjectReference.focus(); }; } </script> (...) <p><a href="http://www.spreadfirefox.com/" target="PromoteFirefoxWindow" onclick="openRequestedPopup(this.href, this.target); return false;" title="This link will create a new window or will re-use an already opened one" >Promote Firefox adoption</a></p>
You can also make such function able to open only 1 secondary window and to reuse such single secondary window for other links in this manner:
<script type="text/javascript"> var windowObjectReference = null; // global variable var PreviousUrl; /* global variable which will store the url currently in the secondary window */ function openRequestedSinglePopup(strUrl) { if(windowObjectReference == null || windowObjectReference.closed) { windowObjectReference = window.open(strUrl, "SingleSecondaryWindowName", "resizable,scrollbars,status"); } else if(PreviousUrl != strUrl) { windowObjectReference = window.open(strUrl, "SingleSecondaryWindowName", "resizable=yes,scrollbars=yes,status=yes"); /* if the resource to load is different, then we load it in the already opened secondary window and then we bring such window back on top/in front of its parent window. */ windowObjectReference.focus(); } else { windowObjectReference.focus(); }; PreviousUrl = strUrl; /* explanation: we store the current url in order to compare url in the event of another call of this function. */ } </script> (...) <p><a href="http://www.spreadfirefox.com/" target="SingleSecondaryWindowName" onclick="openRequestedSinglePopup(this.href); return false;" title="This link will create a new window or will re-use an already opened one" >Promote Firefox adoption</a></p> <p><a href="http://www.mozilla.org/support/firefox/faq" target="SingleSecondaryWindowName" onclick="openRequestedSinglePopup(this.href); return false;" title="This link will create a new window or will re-use an already opened one" >Firefox FAQ</a></p>
"Scripts may not close windows that were not opened by script."
Otherwise the history of URLs visited during the browser session would be lost.about:config
. Since your users are the ones who are supposed to use such windows (and not you, being the web author), the best is to avoid interfering with their habits and preferences. We recommend to always set the resizability and scrollbars presence (if needed) to yes to insure accessibility to content and usability of windows. This is in the best interests of both the web author and the users.Edit/Preferences/Advanced/Scripts & Plug-ins/Allow Scripts to/ Move or resize existing windows
checkbox in Mozilla or Tools/Options.../Content tab/Enable Javascript/Advanced button/Move or resize existing windows
checkbox in Firefox or by setting dom.disable_window_move_resize
to true in about:config
or by editing accordingly their user.js file.Move or resize existing windows
checkbox. Moving and resizing a window remotely on the user's screen via script will very often annoy the users, will disorient the user, and will be wrong at best. The web author expects to have full control of (and can decide about) every position and size aspects of the users' browser window ... which is simply not true.window.open()
: it will be null if the window wasn't allowed to open. However, for most other popup blockers, there is no reliable way.window.open()
method gives a main window a reference to a secondary window; the opener property gives a secondary window a reference to its main window.window.open()
Generally speaking, it is preferable to avoid resorting to window.open() for several reasons:
If you want to offer to open a link in a new window, then follow tested and recommendable usability and accessibility guidelines:
<a href="javascript:window.open(...)" ...>
"javascript:" links break accessibility and usability of webpages in every browser.
Further reading:
<a href="#" onclick="window.open(...);">
Such pseudo-link also breaks accessibility of links. Always use a real URL for the href attribute value so that if javascript support is disabled or inexistent or if the user agent does not support opening of secondary window (like MS-Web TV, text browsers, etc), then such user agents will still be able to load the referenced resource according to its default mode of opening/handling a referenced resource. This form of code also interferes with advanced features in tab-capable browsers: eg. middle-click on links, Ctrl+click on links, Ctrl+Enter on links, "mouse gestures" features.
Identify links that will open new windows in a way that helps navigation for users by coding the title attribute of the link, by adding an icon at the end of the link or by coding the cursor accordingly.
The purpose is to warn users in advance of context changes to minimize confusion on the user's part: changing the current window or popping up new windows can be very disorienting to users (Back toolbar button is disabled).
"Users often don't notice that a new window has opened, especially if they are using a small monitor where the windows are maximized to fill up the screen. So a user who tries to return to the origin will be confused by a grayed out Back button."
quote from The Top Ten New Mistakes of Web Design: 2. Opening New Browser Windows, Jakob Nielsen, May 1999
When extreme changes in context are explicitly identified before they occur, then the users can determine if they wish to proceed or so they can be prepared for the change: not only they will not be confused or feel disoriented, but more experienced users can better decide how to open such links (in a new window or not, in the same window, in a new tab or not, in "background" or not).
References
Example "New Window" Icons & Cursors | |||
---|---|---|---|
If javascript support is disabled or non-existent, then the user agent will create a secondary window accordingly or will render the referenced resource according to its handling of the target attribute: e.g. some user agents which can not create new windows, like MS Web TV, will fetch the referenced resource and append it at the end of the current document. The goal and the idea is to try to provide - not impose - to the user a way to open the referenced resource, a mode of opening the link. Your code should not interfere with the features of the browser at the disposal of the user and your code should not interfere with the final decision resting with the user.
target="_blank"
Always provide a meaningful name to your target attribute and try to reuse such target attribute in your page so that a click on another link may load the referenced resource in an already created and rendered window (therefore speeding up the process for the user) and therefore justifying the reason (and user system resources, time spent) for creating a secondary window in the first place. Using a single target attribute value and reusing it in links is much more user resources friendly as it only creates one single secondary window which is recycled. On the other hand, using "_blank" as the target attribute value will create several new and unnamed windows on the user's desktop which can not be recycled, reused. In any case, if your code is well done, it should not interfere with the user's final choice but rather merely offer him more choices, more ways to open links and more power to the tool he's using (a browser).
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of 'Window.open()' in that specification. | Living Standard | |
CSS Object Model (CSSOM) View Module The definition of 'The features argument to the open() method' in that specification. | Working Draft | Defines the effect of the features argument |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | Yes | Yes | Yes | Yes | ? | ? |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | Yes | Yes | ? | Yes | ? | ? | ? |
In cases where left
and screenX
(and/or top
and screenY
) have conflicting values, then left
and top
have precedence over screenX
and screenY
respectively. If left
and screenX
(and/or top
and screenY
) are defined in the features list, then left
(and/or top
) will be honored and rendered. In the following example the new window will be positioned at 100 pixels from the left side of the work area for applications of the user's operating system, not at 200 pixels.
windowObjectReference = window.open( "http://news.bbc.co.uk/", "BBCWorldNewsWindowName", "left=100,screenX=200,resizable,scrollbars,status" );
If left is set but top has no value and screenY has a value, then left and screenY will be the coordinate positioning values of the secondary window.
outerWidth has precedence over width and width has precedence over innerWidth. outerHeight has precedence over height and height has precedence over innerHeight. In the following example, Mozilla-browsers will create a new window with an outerWidth of 600 pixels wide and will ignore the request of a width of 500 pixels and will also ignore the request of an innerWidth of 400 pixels.
windowObjectReference = window.open( "http://www.wwf.org/", "WWildlifeOrgWindowName", "outerWidth=600,width=500,innerWidth=400,resizable,scrollbars,status" );
Requested position and requested dimension values in the features list will not be honored and will be corrected if any of such requested value does not allow the entire browser window to be rendered within the work area for applications of the user's operating system. No part of the new window can be initially positioned offscreen. This is by default in all Mozilla-based browser releases.
MSIE 6 SP2 has a similar error correction mechanism but it is not activated by default in all security levels: a security setting can disable such error correction mechanism.
When content overflows window viewport dimensions, then scrollbar(s) (or some scrolling mechanism) are necessary to ensure that content can be accessed by users. Content can overflow window dimensions for several reasons which are outside the control of web authors:
You should assume that a large majority of browsers will have the status bar or that a large majority of users will want to force the status bar presence: best is to always set this feature to yes. Also, if you specifically request to remove the status bar, then Firefox users will not be able to view the Site Navigation toolbar if it is installed. In Mozilla and in Firefox, all windows with a status bar have a window resizing grippy at its right-most side. The status bar also provides info on http connection, hypertext resource location, download progress bar, encryption/secure connection info with SSL connection (displaying a yellow padlock icon), internet/security zone icons, privacy policy/cookie icon, etc. Removing the status bar usually removes a lot of functionality, features and information considered useful (and sometimes vital) by the users.
In MSIE 6 for XP SP2: For windows opened using window.open()
:
"For windows opened using window.open():
Expect the status bar to be present, and code for it. The status bar will be on by default and is 20-25 pixels in height. (...)"
quote from Fine-Tune Your Web Site for Windows XP Service Pack 2, Browser Window Restrictions in XP SP2
"(...) windows that are created using the window.open() method can be called by scripts and used to spoof a user interface or desktop or to hide malicious information or activity by sizing the window so that the status bar is not visible.
Internet Explorer windows provide visible security information to the user to help them ascertain the source of the Web page and the security of the communication with that page. When these elements are not in view, the user might think they are on a more trusted page or interacting with a system process when they are actually interacting with a malicious host. (...)
Script-initiated windows will be displayed fully, with the Internet Explorer title bar and status bar. (...)
Script management of Internet Explorer status bar
Detailed description
Internet Explorer has been modified to not turn off the status bar for any windows. The status bar is always visible for all Internet Explorer windows. (...) Without this change, windows that are created using the window.open() method can be called by scripts and spoof a user interface or desktop or hide malicious information or activity by hiding important elements of the user interface from the user.
The status bar is a security feature of Internet Explorer windows that provides Internet Explorer security zone information to the user. This zone cannot be spoofed (...)"
quote from Changes to Functionality in Microsoft Windows XP Service Pack 2, Internet Explorer Window Restrictions
In MSIE 6 for XP SP2:
If the strWindowName
parameter is omitted, a new window or tab is opened. If a window with the same name already exists, the existing window is refreshed.
//Always opens a new window/tab window.open("map.php"); //Refreshes an existing window/tab that was opened with the same name, if one exists window.open("map.php", "BiggerMap");
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/window/open