URL 是链接指向的地址。链接不仅可以指向另一个网页,也可以指向文本、图像、文件等资源。可以这样说,所有互联网上的资源,都可以通过链接访问。
链接通过a标签表示,用户点击后,浏览器会跳转到指定的网址。下面就是一个典型的链接。
代码就定义了一个超级链接。浏览器显示“”,文字下面默认会有下划线,表示这是一个链接。用户点击后,浏览器跳转到href属性指定的网址。
a标签内部不仅可以放置文字,也可以放置其他元素,比如段落、图像、多等等。
代码中,href属性的值是#加上锚点名称。点击后,浏览器会自动滚动,停在当前页面里面demo锚点所在的。
title属性给出链接的说明信息。鼠标悬停在链接上方时,浏览器会将这个属性的值,以提示块的形式显示出来。
target属性指定如何展示打开的链接。它可以是在指定的窗口打开,也可以在iframe里面打开。
代码中,两个链接都在名叫test的窗口打开。首先点击链接foo,浏览器发现没有叫做test的窗口,就新建一个窗口,起名为test,在该窗口打开。然后,用户又点击链接bar,由于已经存在test窗口,浏览器就在该窗口打开,取代里面已经打开的foo.com。
注意,使用target属性的时候,最好跟rel=noreferrer一起使用,这样可以避免安全风险。
nofollow:告诉搜索引擎忽略该链接,主要用于用户提交的内容,防止有人通过添加链接,提高该链接的搜索排名。
noreferrer:告诉浏览器打开链接时,不要将当前网址作为 HTTP 头信息的Referer字段发送出去,这样可以隐藏点击的来源。
noopener:告诉浏览器打开链接时,不让链接窗口通过 Java 的window.opener属性引用原始窗口,这样就提高了安全性。
referrerpolicy属性用于精确设定点击链接时,浏览器发送 HTTP 头信息的Referer字段的行为。
其中,no-referrer表示不发送Referer字段,same-origin表示同源时才发送Referer字段,origin表示只发送源信息(协议+域名+端口)。其他几项的解释,请查阅 HTTP 文档。
ping属性指定一个网址,用户点击的时候,会向该网址发出一个 POST 请求,通常用于用户的行为。
type属性给出链接 URL 的 MIME 类型,比如到底是网页,还是图像或文件。它也是纯粹提示性的属性,没有实际功能。
注意,download属性只在链接与网址同源时,才会生效。也就是说,链接应该与网址属于同一个网站。
代码中,下载文件的原始文件名是foo.exe。点击后,下载对话框提示的文件名是bar.exe。
注意,如果链接点击后,服务器的 HTTP 回应的头信息设置了Content-Disposition字段,并且该字段的值与download属性不一致,那么该字段优先,下载时将显示其设置的文件名。
download属性还有一个用途,就是有些地址不是真实网址,而是数据网址,比如data:开头的网址。这时,download属性可以为虚拟网址指定下载的文件名。
链接也可以指向一个邮件地址,使用mailto协议。用户点击后,浏览器会打开本机默认的邮件程序,让用户向指定的地址发送邮件。
代码中,邮件链接里面不仅包含了邮箱地址,还包含了cc、subject、body等邮件要素。这些要素的值需要经过 URL 转义,比如空格转成%20。
不指定邮箱也是允许的,就像下面这样。这时用户自己在邮件程序里面,填写想要发送的邮箱,通常用于邮件分享网页。
如果是手机浏览的页面,还可以使用tel协议,创建电话链接。用户点击该链接,会电话,可以进行拨号。
link标签主要用于将当前网页与相关的外部资源联系起来,通常放在head元素里面。最常见的用途就是加载 CSS 样式表。
代码中,deult.css是默认样式表,默认就会生效。ncy.css和basic.css是替换样式表(rel=alternate stylesheet),默认不生效。title属性在这里是必需的,用来在浏览器菜单里面列出这些样式表的名字,供用户选择,以替代默认样式表。
link也用于提供文档的相关链接,比如下面是给出文档的 RSS Feed 地址。
rel属性表示外部资源与当前文档之间的关系,是link标签的必需属性。它可以但不限于取以下值。
prefetch:要求浏览器提前下载并缓存指定资源,供下一个页面使用。它的优先级较低,浏览器可以不下载。
preload:要求浏览器提前下载并缓存指定资源,当前页面稍后就会用到。它的优先级较高,浏览器必须立即下载。
prerender:要求浏览器提前渲染指定链接。这样的话,用户稍后打开该链接,就会立刻显示,感觉非常快。
某些情况下,你需要浏览器预加载某些资源,也就是先把资源缓存下来,等到使用的时候,就不用再从网上下载了,立即就能使用。预处理指令可以做到这一点。
link rel=preload告诉浏览器尽快下载并缓存资源(如脚本或样式表),该指令优先级较高,浏览器肯定会执行。当加载页面几秒钟后需要该资源时,它会很有用。下载后,浏览器不会对资源执行任何操作,脚本未执行,样式表未应用。它只是缓存,当其他东西需要它时,它立即可用。
rel=preload除了优先级较高,还有两个优点:一是允许指定预加载资源的类型,二是允许事件的回调函数。下面是rel=preload配合as属性,告诉浏览器预处理资源的类型,以便正确处理。
注意,所有预下载的资源,只是下载到浏览器的缓存,并没有执行。如果希望资源预下载后立刻执行,可以参考下面的写法。
link rel=prefetch的使用场合是,如果后续的页面需要某个资源,并且希望预加载该资源,以便加速页面渲染。该指令不是强制性的,优先级较低,浏览器不一定会执行。这意味着,浏览器可以不下载该资源,比如连接速度很慢时。
link rel=preconnect要求浏览器提前与某个域名建立 TCP 连接。当你知道,很快就会请求该域名时,这会很有帮助。
link rel=prerender要求浏览器加载某个网页,并且提前渲染它。用户点击指向该网页的链接时,就会立即呈现该页面。如果确定用户下一步会访问该页面,这会很有帮助。
代码中,打印时加载print.css,移动设备访问时(设备宽度小于600像素)加载mobile.css。
对于那些不支持 ES6 模块的浏览器,可以设置nomodule属性。支持 ES6 模块的浏览器,会不加载指定的脚本。这个属性通常与type=module配合使用,作为老式浏览器的回退方案。
还有下面一些其他属性,大部分跟 Java 语言有关,可以参考相关的 Java 教程。
async:该属性指定 Java 代码为异步执行,不是造成阻塞效果,Java 代码默认是同步执行。
crossorigin:如果采用这个属性,就会采用跨域的方式加载外部脚本,即 HTTP 请求的头信息会加上origin字段。
integrity:给出外部脚本的哈希值,防止脚本被。只有哈希值相符的外部脚本,做梦洗头才会执行。
nonce:一个密码随机数,由服务器在 HTTP 头信息里面给出,每次加载脚本都不一样。它相当于给出了内嵌脚本的白名单,只有在白名单内的脚本才能执行。
这段代码,只有浏览器不能执行 Java 代码时才会显示,否则就不会显示。返回搜狐,查看更多