target=“_blank“

对于target="_blank",我想补充一些信息。使用target="_blank"打开链接时,可以采取一些额外的措施来提高安全性和用户体验,包括:

  1. 添加rel="noopener"属性:在链接中同时添加rel="noopener"属性可以防止被打开的新窗口对原始页面进行操作(例如通过 window.opener 进行恶意操作)。
html 复制代码
<a href="https://www.example.com" target="_blank" rel="noopener">点击这里</a>
  1. 添加rel="noreferrer"属性:在链接中添加rel="noreferrer"属性可以在新窗口中打开链接时,不传递来源信息,提高用户隐私保护。
html 复制代码
<a href="https://www.example.com" target="_blank" rel="noreferrer">点击这里</a>
  1. 使用JavaScript控制新窗口行为:可以通过JavaScript脚本实现在当前窗口打开链接而不是新的窗口,以避免target="_blank"可能带来的问题。
html 复制代码
<a href="https://www.example.com" onclick="window.location.href='https://www.example.com'; return false;">点击这里</a>

通过以上措施,可以更安全地使用target="_blank"打开链接,并提升用户体验。

存在问题:

  1. 安全隐患:新打开的窗口可以通过window.opener获取到来源页面的window对象即使跨域也可以。某些属性的访问被拦截,是因为跨域安全策略的限制。 但是,比如修改window.opener.location的值,指向另外一个地址,这样新窗口有可能会把原来的网页地址改了并进行页面伪装来欺骗用户。
  2. 新打开的窗口与原页面窗口共用一个进程,若是新页面有性能不好的代码也会影响原页面

解决方案:

  1. 尽量不用target="_blank"
  2. 如果一定要用,需要加上rel="noopener"或者rel="noreferrer"。这样新窗口的window.openner就是null了,而且会让新窗口运行在独立的进程里,不会拖累原来页面的进程。(不过,有些浏览器对性能做了优化,即使不加这个属性,新窗口也会在独立进程打开。不过为了安全考虑,还是加上吧。)
相关推荐
我命由我123452 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_3 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_3 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc5 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne5 小时前
【ijkplayer】 硬解码流程
前端
kyriewen6 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩6 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒6 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔6 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端
Heo7 小时前
大厂前端调试不能只会debugger
前端·javascript·面试