Using rel="noopener" in window.open()
Asked Answered
B

4

27

So I know that I can apply rel="noopener in an a tag when using target="_blank". But I'm trying to pass it as an argument to window.open(), ie:

window.open('http://cats.com', '_blank', 'rel=noopener')

however it doesn't seem to be working the way that I expected, as the opener object still exists on the window after the user clicks on the link.

Is there something I'm missing? Or cannot it not be done the way that I'm intending?

I've found some great articles but they don't quite address my use case as far as I can tell.

https://developer.mozilla.org/en-US/docs/Web/API/Window/open https://mathiasbynens.github.io/rel-noopener/

Much appreciated.

Bibliophile answered 11/9, 2017 at 3:54 Comment(1)
The window feature flag string, as used in window.open(), is just noopener and not rel=noopener. The solution suggested here has the best backwards and cross-browser compatibility, however.Apocryphal
B
29

There is no direct example in doc but it can be used like this and it worked for me.

window.open('http://cats.com', '_blank', 'noopener,resizable,scrollbars')
Brainpan answered 19/4, 2018 at 10:19 Comment(1)
It is available in the documentation here: developer.mozilla.org/en-US/docs/Web/API/Window/… as "Window functionality features" is part of the "Window features" is third argument of the window.open method.Coliseum
I
15

Cover all your bases

The safest way to redirect is by adding noopener, noreferrer, and window.opener = null.

const openInNewTab = (url) => {
    const newWindow = window.open(url, '_blank', 'noopener,noreferrer')
    if (newWindow) newWindow.opener = null
}

Then call your new funtion

openInNewTab('https://stackoverflow.com')

The third param can also take these optional values, based on your needs.

Inanity answered 28/8, 2020 at 5:5 Comment(1)
noreferrer implies noopener, so only the noreferrer is required to have them both active. "8. If noreferrer is true, then set noopener to true." from html.spec.whatwg.org/multipage/…Overcareful
H
5

As far as I know, this cannot be achieved with window.open() arguments. There is, however, is a way to get the behavior:

var newWindow = window.open();
newWindow.opener = null;
newWindow.location = 'http://some.url';
Harrisharrisburg answered 4/12, 2017 at 13:46 Comment(1)
not working in the latest chrome Version 88.0.4324.190 (Official Build) (64-bit). rel = 'noreferrer' worked for meHeadley
E
5

This worked for me:

const a = document.createElement("a")
a.href = args.url
a.target = "_blank"
a.rel = "noopener"
a.click()
Execution answered 5/12, 2017 at 0:10 Comment(2)
So simple. Thanks!Bibliophile
This does not answer the posters question and is not a good coding style as it creates a fake element instead of using a built in function. This should be the accepted answer: https://mcmap.net/q/498958/-using-rel-quot-noopener-quot-in-window-openOrdeal

© 2022 - 2024 — McMap. All rights reserved.