0

0

HTML链接的target属性有哪些值?各有什么作用?

幻夢星雲

幻夢星雲

发布时间:2025-08-11 14:34:02

|

2040人浏览过

|

来源于php中文网

原创

\_blank链接需加rel="noopener noreferrer"以防止安全风险,\_parent在父框架打开,\_top跳出所有框架,framename在指定框架打开,javascript可用window.open()动态控制;1. 使用\_blank时必须添加rel="noopener noreferrer"防止tabnabbing攻击;2. \_parent将链接内容加载到直接父级框架;3. \_top强制在顶层浏览上下文中打开链接;4. framename在指定name的iframe中打开,若不存在则新建;5. 通过window.open()可动态控制打开方式,但需用户触发以避免弹窗拦截;6. 动态修改a标签target属性可实现条件性跳转策略;这些机制共同决定了链接的导航行为和安全性,正确使用能提升用户体验与网站安全,最终应根据场景选择合适的方式并始终关注安全最佳实践。

HTML链接的target属性有哪些值?各有什么作用?

HTML链接的

target
属性,说白了,就是告诉浏览器这个链接点下去之后,内容应该在哪里显示。它决定了是在当前页面、新开一个标签页、还是在某个特定的框架里打开。理解这些值,能帮助我们更好地控制用户体验和页面结构。

解决方案

target
属性主要有以下几个预定义的值,以及一种自定义方式:

  • _self
    : 这是默认值。链接会在当前浏览器上下文(也就是你正在看的那个标签页或窗口)中打开。如果你不写
    target
    属性,链接行为就是这样。
  • _blank
    : 这个值会强制链接在一个新的浏览器上下文(通常是新的标签页或窗口)中打开。
  • _parent
    : 如果你的页面嵌入在框架(
    <iframe>
    或已废弃的
    <frameset>
    )中,
    _parent
    会尝试在当前框架的直接父级框架中打开链接。如果没有父级框架,它的行为就和
    _self
    一样。
  • _top
    : 这个值是最“霸道”的。它会把链接内容加载到整个窗口的顶层浏览上下文,无论当前页面嵌套了多少层框架,它都会跳出所有框架,在整个浏览器窗口中显示。如果页面本身就没有框架,那它也和
    _self
    一样。
  • framename
    : 你可以指定一个自定义的框架名称(比如一个
    <iframe>
    name
    属性值)。链接会尝试在这个指定名称的框架中打开。如果找不到这个名称的框架,浏览器会新开一个标签页/窗口,并给它赋予这个名称,然后在这个新开的窗口中加载链接内容。

_blank
链接的新标签页打开,真的安全吗?

_blank
来让链接在新标签页打开,这是最常见的做法之一。我们经常希望用户在点击外部链接时,不离开当前网站,所以就习惯性地加上
target="_blank"
。这看起来很方便,但实际上,如果使用不当,它会带来一些潜在的安全风险,尤其是一个叫做“Tabnabbing”的问题。

立即学习前端免费学习笔记(深入)”;

简单来说,当你在一个新标签页打开一个链接时,那个新标签页的JavaScript可以通过

window.opener
对象访问到你的原始页面。这意味着,恶意的网站可以利用这个连接,改变你原始页面的URL,比如伪装成一个登录页面,诱骗你输入凭据。这听起来有点吓人,对吧?

所以,一个非常重要的最佳实践是,在使用

target="_blank"
时,同时加上
rel="noopener noreferrer"
属性。

  • noopener
    : 这个属性会阻止新打开的页面通过
    window.opener
    访问到你的原始页面。这是防止Tabnabbing攻击的关键。
  • noreferrer
    : 这个属性除了
    noopener
    的功能外,还会阻止浏览器在新页面请求时发送Referer头信息。这意味着新页面不会知道你从哪个页面跳转过来的,增加了用户的隐私性。

在我看来,很多开发者在用

_blank
的时候,根本没意识到这个安全隐患,或者说,他们只知道要加
rel="noopener"
,但没细想过为什么。这是一个很小的细节,但对用户安全来说却非常重要。每次看到没加这两个属性的
_blank
链接,我都会有点强迫症地想去加上。

_parent
_top
:框架世界里的导航策略

虽然现代网页设计中,

frameset
已经基本被淘汰了,但
<iframe>
的使用依然非常普遍,比如嵌入视频、地图、广告,或者构建一些微前端应用。在这种多框架的场景下,
_parent
_top
就显得很有用了。

想象一下一个页面结构:主页面(top)里嵌入了一个

iframeA
,而
iframeA
里又嵌入了一个
iframeB
。现在,如果
iframeB
里的一个链接被点击:

Moshi Chat
Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

下载
  • 如果链接的
    target
    _parent
    ,那么这个链接的内容就会加载到
    iframeA
    中。它只会影响当前框架的直接上级。
  • 如果链接的
    target
    _top
    ,那么这个链接的内容就会跳出
    iframeA
    iframeB
    ,直接加载到最外层的主页面(top)中。它会“冲破”所有的框架层级。

它们的区别就在于“作用范围”:

_parent
只影响一层,而
_top
是直接回到最顶层。

在实际应用中,

_parent
可能在一些需要局部刷新但又不希望影响整个页面的场景下用到,比如一个嵌入式的后台管理面板,你希望某个操作结果在父级面板里显示。而
_top
则更常用于“跳出框架”的场景,例如,一个嵌入式的登录页面,用户登录成功后,你希望整个主页面都跳转到用户中心,而不是仅仅在iframe里刷新。我个人在使用
<iframe>
时,如果需要从子框架跳转到主站的某个页面,几乎都会毫不犹豫地使用
_top
,这能确保用户体验的一致性,避免页面被“困”在小小的框架里。

JavaScript如何动态控制链接打开方式?

有时候,我们不能简单地在HTML里写死

target
属性,因为链接的打开方式可能需要根据用户行为、数据状态或者其他逻辑来动态决定。这时候,JavaScript就派上用场了。

最直接的方法是使用

window.open()
方法。这个方法非常强大,它允许你打开一个新的浏览器窗口或标签页,并且可以精确控制这个新窗口的各种特性,比如大小、是否显示滚动条、菜单栏等等。

window.open(URL, windowName, [windowFeatures])

  • URL
    : 要打开的链接地址。
  • windowName
    : 这个参数非常关键,它其实就对应了HTML链接
    target
    属性的值。你可以传入
    _blank
    _self
    _parent
    _top
    ,或者任何自定义的框架名称。
  • windowFeatures
    : 一个逗号分隔的字符串,用于定义新窗口的特性,比如
    'width=800,height=600,scrollbars=yes'

示例代码:

假设你有一个按钮,点击后需要根据某些条件决定是新开窗口还是在当前页面跳转:

document.getElementById('dynamicLinkBtn').addEventListener('click', function() {
    const url = 'https://www.example.com/some-page';
    const shouldOpenInNewTab = confirm('要在新标签页打开吗?'); // 模拟一个条件判断

    if (shouldOpenInNewTab) {
        // 在新标签页打开,并指定一些窗口特性
        window.open(url, '_blank', 'width=1024,height=768,resizable=yes,scrollbars=yes');
    } else {
        // 在当前页面打开
        window.location.href = url; // 或者 window.open(url, '_self');
    }
});

当然,你也可以通过JavaScript来动态修改现有

<a>
标签的
target
属性:

document.getElementById('myAnchorTag').addEventListener('click', function(event) {
    // 假设这个链接原本没有target属性
    if (Math.random() > 0.5) { // 随机决定是否新开
        this.setAttribute('target', '_blank');
        this.setAttribute('rel', 'noopener noreferrer'); // 别忘了这个!
    } else {
        this.removeAttribute('target');
        this.removeAttribute('rel');
    }
    // 让链接的默认行为继续执行
});

在使用

window.open()
时,需要特别注意浏览器的弹窗拦截器。很多浏览器默认会拦截非用户触发的
window.open()
调用。所以,最好是响应用户的点击事件来调用它。对我来说,如果只是简单的新标签页,我还是倾向于直接在HTML里写
target="_blank"
rel="noopener noreferrer"
,代码更简洁,也更符合语义。JavaScript的介入,通常是当我需要更精细的控制,比如打开一个特定尺寸的辅助窗口,或者在用户确认后才执行跳转逻辑时。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1565

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1208

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

131

2025.08.07

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号