html怎么打开新窗口_设置target属性实现多窗口打开【技巧】
发布时间 - 2026-01-03 00:00:00 点击率:次最安全写法是target="_blank"配合rel="noopener",可选rel="noreferrer";合法值还有"_self"、"_parent"、"_top";失效常见于sandbox限制、JS拦截或PWA环境。
target="_blank" 是最常用但不是最安全的写法
直接写 target="_blank" 确实能打开新窗口或新标签页,但现代浏览器默认会在新上下文中打开链接,导致 window.opener 指向原页面 —— 这会让新页面能通过 window.opener.location 反向跳转甚至执行脚本,存在安全风险(尤其对用户不可信的链接)。
正确做法是补全两个关键属性:
-
rel="noopener":切断新页面对原页面的引用,禁用window.opener -
rel="noreferrer"(可选):进一步阻止Referer头发送,隐私更强
安全打开
target 属性的其他合法值有哪些
target 不只认 "_blank",它匹配的是浏览器上下文名称(browsing context name),包括以下内置关键字:
-
"_self":在当前标签页打开(默认行为,显式写也无害) -
"_parent":在父的上下文中打开(若无父级则等同_self) -
"_top":在顶层窗口打开,会跳出所有嵌套 -
"_blank":新开上下文(由浏览器决定是新标签页还是新窗口)
注意:target 值区分大小写,"_BLANK" 无效;自定义名称如 "myWindow" 也可用,但重复使用时会复用已有同名窗口 —— 这点常被误用于“始终在同一个新窗口打开”,但实际兼容性差、行为不一致,不推荐。
为什么有时点击没反应?常见 target 相关错误
以下情况会导致 target 失效或行为异常:
- 页面启用了
sandbox属性(如 iframe 中),且未声明allow-popups权限 - 链接被 JavaScript 阻止了默认行为(例如
event.preventDefault()后没手动window.open()) - 在某些 PWA 或 WebView 环境中,
target="_blank"被强制降级为_self(需检查运行环境限制) - Chrome 扩展或广告拦截插件主动屏蔽了新窗口打开逻辑
调试建议:右键链接 → “在新标签页中打开”,如果能成功,说明是 HTML 层面问题;如果也不行,大概率是环境或脚本干预。
window.open()
和 target 属性的本质区别
target 是声明式、纯 HTML 的导航控制,而 window.open() 是命令式、JS 控制的窗口管理,二者能力不同:
-
target无法指定窗口尺寸、位置、是否显示工具栏等 —— 这些在现代浏览器中已被忽略或禁用(出于安全和用户体验) -
window.open()在跨域 iframe 或某些移动端 WebView 中可能被完全禁用(返回null) -
window.open()打开的窗口默认拥有window.opener引用,必须手动加opener: null选项才等效于rel="noopener"
const win = window.open("https://example.com", "_blank", "noopener");
注意:"noopener" 是 Chrome/Edge/Firefox 支持的特性字符串(非标准但广泛支持),更稳妥写法是先打开再立即断开:
const win = window.open("https://example.com");
if (win) win.opener = null;
真正需要精确控制窗口行为的场景越来越少,多数情况下,老老实实用带 rel="noopener" 的 target="_blank" 更可靠。
# javascript
# java
# html
# js
# 浏览器
# edge
# 工具
# win
# 跨域
# 区别
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Internet Explorer官网直接进入 IE浏览器在线体验版网址
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
,交易猫的商品怎么发布到网站上去?
如何在Windows 2008云服务器安全搭建网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
jQuery validate插件功能与用法详解
如何为不同团队 ID 动态生成多个“认领值班”按钮
Android Socket接口实现即时通讯实例代码
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
制作旅游网站html,怎样注册旅游网站?
高防服务器租用如何选择配置与防御等级?
Laravel怎么在Controller之外的地方验证数据
LinuxCD持续部署教程_自动发布与回滚机制
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
韩国服务器如何优化跨境访问实现高效连接?
如何在香港免费服务器上快速搭建网站?
如何在阿里云香港服务器快速搭建网站?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
个人网站制作流程图片大全,个人网站如何注销?
教你用AI润色文章,让你的文字表达更专业
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
音乐网站服务器如何优化API响应速度?
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Java遍历集合的三种方式
Linux安全能力提升路径_长期防护思维说明【指导】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在阿里云高效完成企业建站全流程?
如何在IIS中配置站点IP、端口及主机头?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
百度浏览器如何管理插件 百度浏览器插件管理方法
中国移动官方网站首页入口 中国移动官网网页登录


和 target 属性的本质区别