【HTML并不简单】笔记2-你不知道的a元素属性:target、download、ping、referrerpolicy和href

news2024/9/30 17:17:50

文章目录

    • target属性
    • download属性
    • ping属性
    • referrerpolicy
    • href细节
      • 自动绝对地址
      • 锚点定位
      • 无障碍访问
      • 为何base元素无人问津
      • 实现链接元素a的嵌套

《HTML并不简单:Web前端开发精进秘籍》张鑫旭 笔记

target属性

有场景如下:

在线写作工具经常会有预览功能,点击“预览”按钮后,可以在新窗口查看预览效果,如何实现?

有方法如下:

<a href='preview.html' target='_blank'>预览<a>

这可以打开新窗口,但是若多次点击预览,就会打开多个窗口,不好。最好的效果是:最多只打开一个新窗口,第二次点击“预览”按钮的时候,自动刷新这个新窗口。

可以使用a的target属性实现。

<a>元素中,只要target属性设为某个任意的固定值,则每次新窗口打开的时候,都只会在这个窗口创建。预览只会在唯一的窗口中不断刷新,不会出现打开多个窗口的情况。

<a href='preview.html' target='_preview'>预览<a>

作者例子:https://www.htmlapi.cn/2/1-4.html

其他支持target属性的元素也有类似的特性,例如本书后面介绍的<form>元素。

download属性

可以通过download属性下载图片,指定下载图片的名称:

<a href="xxxx" download="name.jpg">图片<a>

就不需要通过FileSaver.js这种库实现了。

但是,download属性不是万能的。

HTML5引入的download属性可以指示浏览器下载URL,而不是导航到它。这在创建一个链接来下载图片、文件等时非常有用。

然而,出于安全原因,download属性只对同源URL有效。也就是说,如果你尝试使用download属性来下载一个跨域的资源,浏览器将会忽略这个属性,并且像通常那样导航到URL,而不是下载它。

但是,如果浏览器无法打开或显示链接的资源(例如,资源是一个不被浏览器直接支持的文件类型),那么浏览器将会默认下载该资源,无论是否设置了download属性。

这就是为什么download属性并不是万能的,它的行为受到同源策略的限制,并且依赖于浏览器是否能够打开链接的资源

ping属性

<a>元素还自带上报能力。只要设置了ping属性,当用户点击此链接元素的时候,浏览器就会自动发送一个POST请求给ping属性设置的地址。

<a href ping='/assets/example.jpg?action=click&id=button'>按钮<a>

作者演示链接:https://www.htmlapi.cn/2/1-6.html

在这里插入图片描述

ping请求的content-type是text/ping,包含了用户的User-Agent、浏览器和操作系统信息、目标来源地址等信息,非常方便开发人员追踪收集的数据。

优势:

  • 无须JavaScript代码参与,网页功能异常也能上报,不依赖于页面的状态
  • 不受浏览器刷新、跳转或关闭的影响,也不会阻塞页面后续行为,这一点和navigator.sendBeacon()方法类似,可以保证数据上报的准确性
  • 支持跨域
  • 不依赖于页面的状态

劣势:

  • 只能支持点击行为的上报,如果是(重要元素)进入视区或者类似弹框显示的上报,则需要额外触发元素的click()行为
  • 只能支持<a>元素和<area>元素
  • 只能是POST请求
  • 属于新特性,IE浏览器并不支持

适用的场景:

ping属性上报有其独到之处,可以用在需要精确知道数据但不需要交互反馈的场景中。

案例1:需要知道浏览量的页面:直接在列表的外面嵌套一层<a>元素,再将ping属性的值设为POST请求地址就可以

在这里插入图片描述
案例2:需要快速进行AB测试的场景

对于同样两张广告图,各自有50%的概率显示,分别预埋ping属性,然后处理POST请求,就能快速知道哪张广告图的点击效果好,无须专门负责大数据的同事帮忙,前端工程师自己就能搞定这件事情,比较容易出绩效。
这是低成本的杠杆技能之一,同时由于使用成本低,日后技术策略调整也会非常方便。

referrerpolicy

前面的章节中曾提到rel="noreferrer"无法兼顾信息传播和隐私保护,而referrerpolicy属性是可以的。

在这里了解以下referrerpolicy支持的属性值及其含义:

Referrer-Policy - HTTP | MDN (mozilla.org)

面对外部链接,如何设置才能兼顾信息传播和隐私保护?
答:origin-when-cross-origin

<a href='https://www.bbb.com' referrerpolicy='origin-when-cross-origin'>外部链接<a>

这样,外部网站可以知道自己的访问来源是哪个网站,从而增加曝光和流量,同时因为只有域名信息,所以,不会暴露关于网站和用户的任何其他隐私信息,足够安全。

href细节

自动绝对地址

如何使用JavaScript代码将一个相对地址转换为绝对地址?

方法一:使用new URL()方法

const absUrl=new URL(url,[base]).href

设置base参数为你希望的域名,此时就会自动返回绝对地址.

方法二:使用<a>元素的href属性(<form>元素的action属性也行)​

在这里插入图片描述

我在https://cn.bing.com/打开的控制台。

当href属性值直接访问的时候,浏览器会自动将其转换为绝对地址,补全的域名是当前页面所在的域名地址。如果想要指定域名,可以使用<base>元素临时指定:

在这里插入图片描述
href兼容性好,不用担心解析报错。
newURL()若传入非法的url字符串会报错。

锚点定位

锚点定位的本质是页面滚动。href的属性值如果以“#”开头,则点击此链接就会触发锚点定位。

<a href='#example'>案例</a>

点击“查看案例”字样的链接,浏览器会自动查询页面中有没有id属性值是’example’的元素。

如果有,则会通过改变滚动距离的方式,让该元素定位到浏览器的上边缘​;

如果没有,则不会有锚点定位,唯一的变化是浏览器的URL地址的hash值会变成example。

当href属性值是#top的时候,点击该链接会让页面滚动到顶部,其效果等同于href="#",当然,如果页面中存在id="top"的元素,那么此时还是优先定位这个元素,而不是滚动到顶部。

<a href='#top'>案例</a>

无障碍访问

<a>元素自带多个无障碍访问特性,例如,能够使用Tab键聚焦,可以按回车键触发点击行为。这些无障碍访问行为的存在,全部都是因为有href属性。

一个链接元素,如果没有href属性,那么,这个元素是不能被键盘访问的,也不能匹配像:any-link这样的CSS选择器,此时,其行为表现本质上和<span>一样,就是个普通的内联元素。

<a>元素被当作按钮使用的时候,href="javascript:"看起来不参与任何行为,实际上保留了当前元素的可访问性,是不能删除的:

<a href="javascript:">删除</a>

为何base元素无人问津

<base>元素的影响太广泛了,除<meta>元素无法受到影响之外,其余任何与链接地址相关的HTML属性都会受到影响,包括在JavaScript代码中运行的Ajax请求地址。

如链接:https://www.htmlapi.cn/2/1-7.html

使用base很容易出现意料之外的状况,在不知名的地方设置了base,会在很多地方都生效,不好。

实现链接元素a的嵌套

<a>元素是无法嵌套<a>元素的,若嵌套会自动渲染为平行结构。

<a href="#a">外层链接<a href="#b">内层链接</a></a>

变为:

<a href="#a">外层链接</a> <a href="#b">内层链接</a>

然而我们确实会有需要链接嵌套的场景:点击外面是个人信息的链接描述,点击里面是书籍的链接描述。

在这里插入图片描述
如何实现?

答:<area>元素。

非嵌套元素,无法包裹文字或其他标签,作为链接出现时,只能覆盖在其他的元素上。

实现案例:https://www.htmlapi.cn/2/1-8.html

用area实现链接嵌套,再使用CSS让area元素绝对定位覆盖外面的span元素即可。

area的单独使用只能在Chrome浏览器,在Firefox和Safari浏览器下,area元素尚不能脱离map元素使用。

HTML5中<area>标签深入全面解析_area标签-CSDN博客

关于map的案例:https://www.htmlapi.cn/2/1-9.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

源2.0-M32大模型适配AutoGPTQ工具及量化推理教程

AutoGTPQ简介 AutoGPTQ‌是一个开源工具包&#xff0c;专注于简化大规模语言模型(LLMs)的量化过程。它基于高效的GPTQ算法开发&#xff0c;主要使用Python编程语言&#xff0c;并依托PyTorch框架来实现量化功能。AutoGPTQ的设计目标是为开发者和研究人员提供一个易于使用的API接…

【Golang】关于Go语言数学计算、随机数生成模块--math

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

多功能声学气膜馆:承载梦想与希望的舞台—轻空间

在9月29日上午&#xff0c;苏州大学应用技术学院的2024级新生开学典礼暨开学第一课在轻空间建造的多功能声学气膜馆内盛大举行。这一盛典不仅见证了2849名新生的入学&#xff0c;也展示了气膜馆的独特魅力与优越功能。 卓越的声学表现 声学气膜馆采用高性能材料&#xff0c;确保…

Linux-基础实操篇-组管理和权限管理(上)

Linux 组基本介绍 在 linux 中的每个用户必须属于一个组&#xff0c;不能独立于组外。在 linux 中每个文件 有所有者、所在组、其它组的概念。 用户和组的基本概念&#xff1a; 用户名&#xff1a;用来识别用户的名称&#xff0c;可以是字母、数字组成的字符串&#xff0…

解决DHCP服务异常导致设备无法获取IP地址的方法

DHCP在网络环境中会自动为网络中的设备分配IP地址和其他关键网络参数&#xff0c;可以简化网络配置过程。但是&#xff0c;如果DHCP服务出现异常时&#xff0c;设备可能无法正常获取IP地址&#xff0c;会影响到网络通信。 本文讲述一些办法可以有效解决DHCP服务异常导致设备无法…

YAML管理接口框架配置的最佳实践!!

YAML 文件在接口框架中作为配置管理的语言&#xff0c;以其简洁、直观的语法&#xff0c;迅速成为开发者的宠儿。然而&#xff0c;如何高效地管理和组织接口框架的配置&#xff0c;往往是一个容易被忽视的难题。你是否曾因为冗长的配置文件而感到头疼&#xff1f;今天&#xff…

干冰清洗机的工作原理

干冰清洗机的工作原理主要基于干冰的物理特性&#xff0c;特别是其升华过程。以下是干冰清洗机工作原理的详细解释&#xff1a; 一、干冰的制备 制冰系统&#xff1a;干冰清洗机内部配备有制冰系统&#xff0c;该系统将液态二氧化碳&#xff08;CO₂&#xff09;快速冷却并压…

HTTP协议讲解,请求报文与响应报文都是什么?网络控制台查看HTTP请求

目录 一. HTTP解析 二. 请求报文 2.1 请求行 2.1.1 请求类型 2.1.2 请求URL路径 2.1.3 发送的HTTP请求的版本 2.2 请求头 2.2.1 Host&#xff1a;主要用来实现虚拟主机技术 2.2.2 Cookie&#xff1a;一种让浏览器帮忙携带信息的手段 2.2.3 Content—type&#xff1a;…

揭秘分布式定时任务在人工智能RPA机器人中的应用|实在RPA研究

一、引言 在人工智能技术不断突破的今天&#xff0c;RPA智能机器人已经渗透到各行各业&#xff0c;成为企 业提升效率、降低成本的重要工具。而在机器人高效运作的背后&#xff0c;分布式定时任务发挥着 不可替代的作用。本文将深入探讨分布式定时任务在人工智能机器人中的应用…

leetcode-链表篇3

leetcode-61 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输出&#x…

opencv - Fourier Transform 傅里叶变换

目标 在本节中&#xff0c;我们将学习 使用 OpenCV 查找图像的傅里叶变换利用 Numpy 中可用的 FFT 函数傅里叶变换的一些应用我们将看到以下函数&#xff1a;cv.dft()、cv.idft() 等 理论 傅里叶变换用于分析各种滤波器的频率特性。对于图像&#xff0c;2D 离散傅里叶变换 …

优选驾考系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;驾校管理&#xff0c;驾考文章管理&#xff0c;驾照类型管理&#xff0c;报名入口管理&#xff0c;学员报名管理&#xff0c;练车预约管理&#xff0c;考试场地管理 微信端账号功能包括&#xff1a;系…

【羊毛资源】华为云开发者云主机免费申请使用指南

本文内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01; 如果对您有帮助&#xff0c;烦请点赞、关注、转发、订阅专栏&#xff01; 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】&#xff08;全…

【GAN 图像生成】

理论知识学习&#xff1a; PART 1&#xff1a; 生成对抗网络GAN 深度学习模型&#xff0c;用于生成数据 对抗式训练&#xff0c;生成器v判别器 DCGAN>WGAN>StyleGAN技术不断进化 GAN在艺术创作。数据增强领域应用越来越广泛 应用&#xff1a; GAN在图像合成&#x…

生信初学者教程(十二):数据汇总

文章目录 介绍加载R包导入数据汇总表格输出结果总结介绍 在本教程中,汇总了三个肝细胞癌(HCC)的转录组数据集,分别是LIRI-JP,LIHC-US/TCGA-LIHC和GSE14520,以及一个HCC的单细胞数据集GSE149614的临床表型信息。这些数据集为科研人员提供了丰富的基因表达数据和相关的临床…

SqlAlchemy使用教程(七) 异步访问数据库

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门SqlAlchemy使用教程(六) – O…

Find My储物盒|苹果Find My技术与储物盒结合,智能防丢,全球定位

储物盒是用来存储&#xff0c;收藏东西的器具。储物盒可以帮助用户合理利用有限的空间&#xff0c;通过分类归置物品&#xff0c;避免浪费和混乱。储物盒能够有效地保护存放的物品&#xff0c;防止它们受到灰尘、污渍、损坏和潮湿的影响。储物盒还可以增加空间利用率、方便搬家…

Windows环境下使用Docker配置MySQL数据库

用Docker配置数据库&#xff0c;无论是做开发&#xff0c;还是做生产部署&#xff0c;都非常的方便 它不需要单独安装数据库&#xff0c;也不用担心出现各种环境的配置问题。 本文将分享用Docker配置数据库的步骤&#xff0c;这里用MySQL举例。 其他的数据库如MSSQL&#xf…

全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口

IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点&#xff1a;支持IPv4 提供高精版、…

Scalefit:有效避免工作场所运动损伤的解决方案

在当今快节奏的工作环境中&#xff0c;运动损伤已成为一个不容忽视的问题。长时间的久坐、重复性动作以及缺乏适当的运动&#xff0c;都可能导致肌肉骨骼损伤、关节疼痛等问题。作为一款专注于运动健康管理的平台&#xff0c;Scalefit Industrial Athlete通过科学的方法和个性化…