仅对无显式 target 的链接和表单生效,且必须置于 中、 之后;若失效,常见原因是位置错误、被显式 target 覆盖,或 js 跳转不受其影响。

base 标签设 target="_self" 不是“覆盖窗口”的操作,它只是显式声明:所有没写 target 的链接和表单,都在当前浏览上下文中加载——顶层页面就刷新整个标签页,iframe 里就只刷那个框。
为什么写了 <base target="_self"> 还没效果?
常见失效不是因为值写错,而是环境不满足或被更高优先级规则覆盖:
-
<base>没放在内(必须且只能出现一次,且应在<title></title>之后、其他依赖相对 URL 的标签之前) - 页面中存在显式
target的<a></a>或<form></form>(比如<a href="x" target="_blank"></a>),它们永远优先生效 - 用了空字符串
target=""—— 这不算显式声明,仍会走<base>,但容易误判为“已控制” - 链接是 JS 触发的(如
location.href = "x"、window.open("x")),<base target>对其完全无效
target="_self" 和不写 target 有区别吗?
行为上基本一致,但有两个实际差异:
- 当页面已有
<base target="_blank">(比如 CMS 主题注入的),<base target="_self">是唯一能主动覆盖它的写法(注意:不能在同一文档中写两个<base>,后一个会忽略) - 对
<form></form>同样生效——很多模板漏掉这点,导致表单提交意外弹窗;显式写target="_self"是防御性做法 - 代码可读性更强:“我确认要留在当前页”,比留空更利于协作和审查
真正想“强制替换当前页”,该怎么做?
别依赖 <base> 全局兜底,精细控制靠具体元素或脚本:
- 对链接:统一删掉所有
target属性,或批量加target="_self"(推荐用 JS 补救,尤其在无法修改模板时) - 对表单:确保
<form></form>上没设target,或显式写target="_self"(别写在<button></button>上) - 禁用
<base target>全局设置——它无法区分外链/内链,容易让“返回列表”这类操作也新开页 - 若必须保留
<base target="_blank">(如第三方主题限制),可用脚本修正:document.querySelectorAll('a[href]:not([target])').forEach(a => a.target = '_self');
最常被忽略的一点:<base> 不是跳转策略工具,它是最后兜底机制;只要某个链接或表单带了 target,它就彻底失效。精细控制必须落在具体元素上,或者用 JS 动态干预。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











