必须要记住的是:
使用target="_blank" 时 需同时使用rel="noopener"或者rel="noreferrer"
原因:
1、安全问题:使用target="_blank"打开新窗口后,新页面能通过window.opener获取到来源页面的window对象,即使跨域也一样。虽然跨域的页面对于这个对象的属性访问有所限制,但还是能访问到部分属性。
2、性能问题: 通过target="_blank"打开的新窗口,跟原来的页面窗口共用一个进程。
解决办法:
1、尽量不使用target="_blank",如果一定要用,需要加上rel="noopener"或者rel="noreferrer"。
2、对于通过window.open的方式打开的新页面
const pageWindow = window.open();
pageWindow.opener = null;
pageWindow.location = "http://a.b.c.com";
pageWindow.target = "_blank";
网友评论