Использование rel=noopener в window.open()

Итак, я знаю, что могу применить rel="noopener в теге a при использовании target="_blank". Но я пытаюсь передать это как аргумент window.open(), т.е.:

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

однако, похоже, это не работает так, как я ожидал, поскольку объект opener все еще существует в окне после того, как пользователь щелкает ссылку.

Есть что-то, что мне не хватает? Или нельзя сделать не так, как я задумал?

Я нашел несколько отличных статей, но, насколько я могу судить, они не совсем подходят для моего варианта использования.

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

Очень признателен.


person Bryantee    schedule 11.09.2017    source источник
comment
Строка флага функции окна, используемая в window.open(), представляет собой просто noopener, а не rel=noopener. Однако решение, предложенное здесь, имеет наилучшую обратную и кросс-браузерную совместимость.   -  person Daniel    schedule 30.09.2019


Ответы (4)


Это сработало для меня:

const a = document.createElement("a")
a.href = args.url
a.target = "_blank"
a.rel = "noopener"
a.click()
person Chet    schedule 05.12.2017
comment
Так просто. Спасибо! - person Bryantee; 12.04.2018
comment
Это не отвечает на вопрос плакатов и не является хорошим стилем кодирования, поскольку создает поддельный элемент вместо использования встроенной функции. Это должен быть принятый ответ: stackoverflow.com/a/49918599/7905854 - person onewaveadrian; 26.07.2021

В doc нет прямого примера, но он можно использовать так, и это сработало для меня.

window.open('http://cats.com', '_blank', 'noopener,resizable,scrollbars')
person Nauman Rafique    schedule 19.04.2018
comment
Он доступен в документации здесь: developer.mozilla. org/en-US/docs/Web/API/Window/, поскольку функции Windows являются частью функций Windows, является третьим аргументом метода window.open. - person Alexander Yamkov; 15.06.2020

Насколько я знаю, этого нельзя добиться с помощью window.open() аргументов. Однако есть способ получить поведение:

var newWindow = window.open();
newWindow.opener = null;
newWindow.location = 'http://some.url';
person Cl Local    schedule 04.12.2017
comment
не работает в последней версии Chrome 88.0.4324.190 (официальная сборка) (64-разрядная версия). rel = 'noreferrer' у меня сработало - person JJ_Coder4Hire; 16.03.2021

Покройте все свои базы

Самый безопасный способ перенаправления — добавить noopener, noreferrer и window.opener = null.

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

Затем вызовите свою новую функцию

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

Третий параметр также может принимать эти необязательные значения. , исходя из ваших потребностей.

person Gibolt    schedule 28.08.2020
comment
noreferrer подразумевает noopener, поэтому требуется только noreferrer, чтобы они оба были активны. 8. Если значение noreferrer равно true, установите для параметра noopener значение true. из html.spec.whatwg.org/multipage/ - person Xeos; 30.09.2020