base 标签的 target 属性为当前页面所有未显式声明 target 的 和 元素提供默认目标,仅影响无 target 属性的元素,不自动添加 rel="noopener",存在安全与行为干扰风险。

base 标签的 target 属性到底控制什么
的 target 属性不是“给某个链接设打开方式”,而是为**当前页面所有未显式声明 target 的 和 元素**提供默认目标。它只影响那些没写 target 的标签,一旦你在某个 里写了,就完全绕过 。
为什么加了 后所有链接都新标签打开了
这是预期行为,但容易误用:
- 它会影响所有相对路径链接(如
)、绝对路径链接(如),甚至部分协议完整链接(除非你显式覆盖) -
提交也会走这个默认target,可能造成表单提交后跳转到新标签页,打断用户流程 - 如果页面里有内嵌
,且用了target="myframe"这类命名目标,会干扰其行为——除非你同时配了href并确保命名一致 - 现代浏览器对
不自动补rel="noopener",这意味着从新标签页能通过window.opener反向控制原页面,存在安全风险
如何安全地用 base 统一控制链接打开方式
真要用,得配合显式防护和边界控制:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 必须把
放在最前面,且整个文档只能有一个 - 如果只希望影响链接、不碰表单,就别依赖
,改用 JS 批量加属性或 CSS-in-JS 注入逻辑 - 若坚持用
target="_blank",务必在每个实际上补rel="noopener noreferrer"——不帮你加这个 - 测试时重点检查:锚点链接(
href="#section")、空链接(href="#")、JavaScript 链接(href="javascript:void(0)")是否被意外带上新窗口行为
替代方案比 base target 更可控
多数真实项目里, 是个“省事但埋雷”的选择:
- 用 CSS 类 + JS 监听(如
document.querySelectorAll('a[data-blank]'))更灵活,还能按需加rel - 构建时用模板引擎或预处理器批量注入属性,比运行时靠 HTML 解析更可靠
- 对于 SSR 页面,直接在服务端渲染阶段判断上下文(如是否移动端、是否 iframe 内),动态决定是否加
target -
的target在 Web Components 或 Shadow DOM 中作用范围有限,容易失效
真正难处理的不是怎么设,而是设完之后谁会受影响、谁会被漏掉、谁会因此变慢或不安全——这些细节往往在上线后才暴露。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










