如何自动将rel =“ noopener”添加到target =“ _ blank”链接?

时间:2019-04-24 08:30:26

标签: javascript

我有一个包含所有外部链接的target =“ _ blank”的JS。出于安全原因,我还需要附加rel =“ noopener”。

对实现这个目标有帮助吗?

我的脚本:

(function($) {
  jQuery(document).ready(function() {
    add_target_blank_to_external_links();
  });

  function add_target_blank_to_external_links() {
    $('a[href^="http://"], a[href^="https://"]').not('a[href*="' + location.hostname + '"]').attr('target', '_blank');
  }
})(jQuery);

2 个答案:

答案 0 :(得分:0)

因此,您的最终解决方案如下。

使用rel="noopener"是非常好的做法,因为它可以防止新页面返回以控制初始页面。您也可以像rel="noreferrer"

(function($) {
  jQuery(document).ready(function() {
    add_target_blank_to_external_links();
  });

  function add_target_blank_to_external_links() {
    $('a[href^="http"]').not('a[href*="' + location.hostname + '"]').attr({target: "_blank", rel: "noopener"});
  }
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="">Demo link</a>

答案 1 :(得分:0)

对上面 labu4bd 的回答的一个小改进(非常有用,谢谢!)是将初始过滤器更改为仅修改正文中的链接,因此它们不会添加到头部的样式和脚本链接中。

例如:

(function($) {
  jQuery(document).ready(function() {
    add_target_blank_to_external_links();
  });

  function add_target_blank_to_external_links() {
    $('body a[href^="http"]').not('a[href*="' + location.hostname + '"]').attr({target: "_blank", rel: "noopener"});
  }
})(jQuery);