2017-08-30 16 views
1

我試圖按照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

它不起作用: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

+0

謝謝。那麼使用'window.open'中返回的'window'對象,然後執行'window.opener = null'呢? – tabiul

+0

是的解決方法,請參閱https://mathiasbynens.github.io/rel-noopener/#recommendations:您需要這樣做:var otherWindow = window.open(); otherWindow.opener = null; otherWindow.location = url;'。 – sideshowbarker