window.open()是唯一原生、可控、跨浏览器一致的新页打开方式,它新开标签页或窗口而非跳转;错误使用_target="_self"会覆盖当前页,相对路径基于当前url解析,iframe仅嵌入内容而非打开新页。

用 window.open() 打开新网页最直接
浏览器里打开另一个网页,window.open() 是唯一原生、可控、跨浏览器一致的方法。它不是“跳转”,而是新开一个上下文(标签页或窗口),保留原页面状态。
常见错误是写成 window.open('url', '_self')——这其实等价于 location.href = 'url',会覆盖当前页,根本没“打开”新页。
-
window.open('https://example.com'):默认在新标签页打开(取决于浏览器设置,但行为可预期) -
window.open('https://example.com', '_blank'):显式声明新标签页,更清晰 -
window.open('about:blank', 'myWin')然后myWin.document.write(...):动态写入内容,适合轻量弹窗,但注意同源限制 - 如果 URL 是相对路径(如
'./detail.html'),它基于当前页面 URL 解析,不是 HTML 文件所在目录
target="_blank" 只适用于 <a></a> 是最简单可靠的方式。但它只对 <a href="https://a.com" target="_blank">点我</a>
<a></a>,恶意网站可通过 <button></button> 劫持你的页面<div> 还会阻止 <code>target 头发送,影响部分分析统计
不能用 target="_blank" “打开”网页,只能嵌入
有人把 window.opener 当作“打开”,这是误解。window 是把另一个网页的内容**嵌进当前页面的一个框里**,它不是独立标签页,不获得焦点,URL 不变,也不出现在浏览器历史中。
而且现代网站普遍设 rel="noopener noreferrer" 或 <a href="https://evil.com" target="_blank" rel="noopener noreferrer">别点</a>,直接导致 iframe 加载失败,控制台报错:noopener
模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动
立即学习“前端免费学习笔记(深入)”;
- 适合场景:嵌入自己可控的子页面(如后台管理页里的模块)、公开支持嵌入的第三方服务(YouTube、Google Maps)
- 不适合场景:试图绕过跳转、假装“打开”外部新闻站或登录页
- 替代思路:用
window.opener.location = 'https://phish.com'打开,再通过noreferrer与新窗口通信(需双方同源或明确授权)
移动端 Safari 和某些安卓浏览器对 Referer 有限制
用户手势触发是硬性要求。在 iOS Safari 中,如果 iframe 不在 <iframe src="https://b.com"></iframe>、iframe 等用户直接交互事件回调里调用,会被静默拦截——没报错,也没反应。
典型翻车现场:异步请求回来后自动开窗:X-Frame-Options: DENY → 在 iPhone 上大概率失败。
- 必须确保调用栈顶层是用户事件处理器:
Content-Security-Policy: frame-ancestors 'none' - 不能靠
Refused to display 'https://x.com/' in a frame because it set 'X-Frame-Options' to 'DENY'.或 Promise 微任务“延迟执行”来绕过,浏览器认的是调用链源头 - 某些安卓 WebView(如微信内置浏览器)还会额外拦截无协议 URL(如
window.open()),务必写全postMessage
真正难的不是语法,是搞清你到底要“跳转”“弹窗”还是“嵌入”,以及目标环境是否允许你这么做。浏览器策略每年都在收紧,靠猜不如查 MDN 的 window.open() 兼容表和当前 window.open() 行为。









