Настройка noopener для динамического URL

1

Я стараюсь следовать рекомендациям https://developers.google.com/web/tools/lighthouse/audits/noopener и https://mathiasbynens.github.io/rel-noopener/ и пытаюсь установить значение для rel to noreferrer noopener. Дело в том, что я не могу установить значение href поскольку оно является динамическим. Мне нужно сделать вызов Api для моей внутренней конечной точки, чтобы получить URL-адрес. В связи с этим я задаюсь вопросом,

   <a ng-click="getUrl()" rel="noreferrer noopener">
                            <i class="action icon view"></i>
   </a>

   var getUrl = function() {
         // call some endpoint, on success
         $window.open(url, '_blank');
   } 

Есть ли какое-либо значение при установке значения rel?

Теги:
security
browser
window-object

1 ответ

1
Лучший ответ

Он не работает: атрибут noopener будет иметь ожидаемого эффекта в случае в вопросе, то есть для окна/вкладки, которая открыта из ссылки без атрибута href. Простой тест:

<!doctype html>
<title>simple noopener test</title>

<a onclick = "getUrl()"
rel = "noreferrer noopener">Case 1: click here to open a new tab that <b>will</b>
have access to the window object of this document (despite the'noopener')</a>

<p>
<a href="http://example.com"
rel = "noreferrer noopener">Case 2: click here to open a new tab that <b>will not</b>
have access to the window object of this document (because of the'noopener'</a>

<script>
var getUrl = function() {
  window.open("http://example.com", '_blank');
}
</script>

В случае 1 в этом примере, если вы установите флажок window.opener новой вкладки/окна, которая будет открыта, вы увидите ее непустую. Но проверьте новое окно/вкладку в примере 2, и вы увидите его значение null.

Есть ли какое-либо значение при установке значения rel?

Нет, для случая в вопросе, кажется, что нет никакой ценности при установке noopener, потому что он не собирается препятствовать noopener нового окна/вкладки в window документа, который его открыл.

  • 0
    Благодарю. Как насчет использования объекта window возвращенного в window.open а затем выполнения window.opener = null ?
  • 0
    Да, чтобы обойти это, см. Mathiasbynens.github.io/rel-noopener/#recommendations : Вам нужно сделать это следующим образом: var otherWindow = window.open(); otherWindow.opener = null; otherWindow.location = url; ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню