target=""等同于target="_self",不会新开标签页;必须显式写target="_blank"并搭配rel="noopener noreferrer"才能安全新开页且防止opener攻击。

target="_blank" 为什么不能设为空字符串
HTML 中 target 属性设为空字符串(target="")不会触发新标签页,而是退化为 target="_self" —— 这是浏览器规范行为,不是 bug。很多开发者误以为留空等于“自动选新窗口”,结果按钮点击后总在当前页跳转,根本没开新标签页。
必须显式写 target="_blank" 才生效
要确保新开标签页,target 值必须是字面量 "_blank",不能是空字符串、空格或 "_new" 这类自定义值(除非你同时定义了对应 name 的 iframe 或窗口)。常见错误包括:
- 写成
<button onclick="window.open('url')">却忘了传'_blank'第二个参数 - 用
<a href="..." target="">期望新开页,实际仍当前页加载 - 通过 JS 动态设置
el.target = "",等同于删掉该属性,失去新窗口语义
window.open() 的兼容性坑比 target="_blank" 更多
如果用 JS 控制新开页(比如按钮绑定 click 后调用 window.open()),要注意:
- 必须是用户主动触发的事件(如 click)中调用,否则会被现代浏览器拦截
- 第二个参数不传或传空字符串
"",等价于"_blank",但部分旧版 Safari 会复用标签页;显式写"_blank"更稳妥 - 第三个参数(features)若含空格或非法键值(如
"width=,height=500"),整个弹窗可能失败,且无提示 -
window.open()返回的引用在跨域页面中不可读取,别依赖它做后续操作
安全与体验:别漏掉 rel="noopener noreferrer"
只写 target="_blank" 有安全隐患:新开页可通过 window.opener 访问原页面上下文,可能被恶意页面篡改或钓鱼。必须配套加上:
立即学习“前端免费学习笔记(深入)”;
<a href="https://example.com" target="_blank" rel="noopener noreferrer">链接</a>
注意:rel="noopener" 是关键,noreferrer 是可选补充(会去掉 Referer)。若用 JS 调用 window.open(),则无法通过 HTML 属性控制 opener 关系,只能靠传参:window.open(url, '_blank', 'noopener') —— 但这个写法仅 Chromium 支持,Firefox 不认,所以最稳方案仍是用带 rel 的 <a> 标签模拟按钮行为。
真正容易被忽略的是:哪怕你用 <button> + JS,最后也得回退到 <a> 标签来规避 opener 风险,而不是硬扛 JS 方案。



















