对于target="_blank"
,我想补充一些信息。使用target="_blank"
打开链接时,可以采取一些额外的措施来提高安全性和用户体验,包括:
- 添加
rel="noopener"
属性:在链接中同时添加rel="noopener"
属性可以防止被打开的新窗口对原始页面进行操作(例如通过window.opener
进行恶意操作)。
html
<a href="https://www.example.com" target="_blank" rel="noopener">点击这里</a>
- 添加
rel="noreferrer"
属性:在链接中添加rel="noreferrer"
属性可以在新窗口中打开链接时,不传递来源信息,提高用户隐私保护。
html
<a href="https://www.example.com" target="_blank" rel="noreferrer">点击这里</a>
- 使用JavaScript控制新窗口行为:可以通过JavaScript脚本实现在当前窗口打开链接而不是新的窗口,以避免
target="_blank"
可能带来的问题。
html
<a href="https://www.example.com" onclick="window.location.href='https://www.example.com'; return false;">点击这里</a>
通过以上措施,可以更安全地使用target="_blank"
打开链接,并提升用户体验。
存在问题:
- 安全隐患:新打开的窗口可以通过
window.opener
获取到来源页面的window
对象即使跨域也可以。某些属性的访问被拦截,是因为跨域安全策略的限制。 但是,比如修改window.opener.location
的值,指向另外一个地址,这样新窗口有可能会把原来的网页地址改了并进行页面伪装来欺骗用户。 - 新打开的窗口与原页面窗口共用一个进程,若是新页面有性能不好的代码也会影响原页面
解决方案:
- 尽量不用
target="_blank"
- 如果一定要用,需要加上
rel="noopener"
或者rel="noreferrer"
。这样新窗口的window.openner
就是null
了,而且会让新窗口运行在独立的进程里,不会拖累原来页面的进程。(不过,有些浏览器对性能做了优化,即使不加这个属性,新窗口也会在独立进程打开。不过为了安全考虑,还是加上吧。)