HTML 关于 a 标签的 target 属性

307 阅读1分钟

网页通过a标签打开一个新窗口

<a href="http://***" target="_blank">新窗口</a>

安全问题

如果只是单纯的加target="_blank"打开新窗口,则可以在新窗口内通过window.opener访问到来源页面的window对象,即使跨域也一样

如果修改window.opener.location的值,指向另外一个地址。 即可以造成刚刚还是在某个网站浏览,随后打开了新窗口,结果这个新窗口神不知鬼不觉地把原来的网页地址改了。此时,就可以通过页面伪装,比如伪装成登陆页等,来让用户输入账号密码,从而到达黑客的目的。

新窗口与原来的页面窗口共用一个进程,若新页面执行了性能不好的 JavaScript 代码,占用了大量系统资源,那你原来的页面的性能也将受到影响

解决方法

1、加上rel="noopener"或者rel="noreferrer"

这样新窗口的window.opener就是null,并且新窗口会运行在独立的进程里,可能部分浏览器做了优化,不加该属性也会运行在新的进程里,推荐添加。

2、window.open打开新页面
var newWindow = window.open();
newWindow.opener = null;
newWindow.location = "https//****";
newWindow.target = "_blank";