为动态网址设置noopener

时间:2017-08-30 00:29:36

标签: javascript html5 security browser window-object

我正在尝试遵循https://developers.google.com/web/tools/lighthouse/audits/noopenerhttps://mathiasbynens.github.io/rel-noopener/的建议,并尝试将rel的值设置为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值还有什么价值吗?

1 个答案:

答案 0 :(得分: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中的新窗口/选项卡,您将看到它为空。

  

设置rel值还有什么价值吗?

否 - 对于问题中的情况,似乎设置noopener没有任何价值,因为它不会阻止新窗口/选项卡访问打开的文档的window