New HTML5 Attributes for Hyperlinks: download, media, and ping
<a>
tag to keep existing attributes like href
, rel
, and others company.
The new attributes are: download
, media
, and ping
. In this article, we’ll take a quick look at what these new attributes are, and how they can be used once browser support improves.
The download
Attribute
The download
attribute is new in HTML5. It supplements the existing href
attribute by telling the browser that the resource the href
points to should be downloaded directly, instead of visited (which could happen with a file that the browser can open, like a PDF). The value of the download
attribute is used for the name of the file that is downloaded.
The download
attribute can be the same as the file referenced in the href
attribute, but it doesn’t have to be. Being able to have different values for href
and download
can come in handy. For example, you might need to generate unique files dynamically on the server for monthly or yearly reports on a per user basis, but still present the user with a meaningful filename for when they download a file. Because the download attribute can be different to the href, this is pretty easy to do:
<a href="files/eid987jdien2i.pdf" download="Monthly Report for March 2014.pdf">Download March 2014 Report</a>
When a user clicks the download link, they’ll download Monthly Report for March 2014.pdf rather than the endearingly named eid987jdien2i.pdf.
In theory there aren’t any restrictions on what you can enter for the download
attribute. In practice this isn’t quite true, as you’ll need to bear in mind the restrictions operating systems impose on which characters can’t be used in filenames — such as the backslash ‘\’ on Windows, or the forward slash ‘/’ on *nix and OS X — and that the browser may adjust the download
attribute’s value accordingly. It’s also worth noting that the download
attribute’s value can be overridden by the Content-Disposition
HTTP header’s filename
parameter.
The download
attribute can be used with blob and data URI’s, which makes it useful where users need to be able to save dynamic content they’ve created through your web application (e.g. drawing applications).
Typically you would set the href
attribute to the blob or data URI, then, as with the monthly report example earlier, set the download
attribute to a more meaningful file name. The following example shows how you can do this when using the Canvas API.
Here is our HTML:
<section> <canvas id="c" width="400" height="400"></canvas> <footer> <a id="download-canvas" href="#">Download</a> </footer> </section>
And the JavaScript:
(function() { var canvas = document.getElementById('c'), cxt = canvas.getContext('2d'), downloadLink = document.getElementById('download-canvas'); cxt.fillRect(100, 100, 200, 200); cxt.clearRect(150, 150, 100, 100); downloadLink.href = canvas.toDataURL(); downloadLink.download = "squares.png"; })();
And here’s a live demo:
Note that in a real-world application, it is likely that the download
attribute would not be hard coded, but would instead be added after input by the user ahead of downloading the image.
Browser Support for the download
Attribute
While you may be thinking that the download
attribute heralds the end of you having to implement file download logic on the server, unfortunately it isn’t fully supported across all major browsers. At the time of writing, Safari and IE (both desktop and mobile) do not support this attribute.
The media
Attribute
If you’ve worked with CSS, then you’ve come across the media
attribute before, and you’ve probably used it on the link
tag. In HTML5 the media
attribute can now also be applied to a hyperlink. It works in the same way, and its value can be any valid media query.
When applied to the <a>
tag, the media
attribute is used in a purely advisory capacity. It could be useful, for example, in situations where you provide device-specific downloads, such as for desktop and mobile wallpapers:
<ul> <li> <a href="download/320" media="min-width: 320px"> <img src="files/320.jpg" alt=""> </a> </li> <li> <a href="download/1382" media="min-width: 1382px"> <img src="files/1382.jpg" alt=""> </a> </li> </ul>
It could also be applied to those ‘Print’ links you often see on long, multi-page articles, where you follow the link to get the whole article on one page formatted for printing:
<footer> <p>Page 1 of 6 <a href="/print/1234" media="print">Print All</a></p> </footer>
Browser Support for the media
Attribute
As of this writing, it doesn’t seem that there is much support, if any, for this attribute on hyperlinks. It’s listed as an HTML5 attribute on MDN’s HTML reference but it’s not listed as a valid attribute on the WHATWG spec or on W3C.
The ping
Attribute
Finally, let’s look at the new ping
attribute. This attribute takes a space-separated list of URL’s that are to be pinged should the user successfully navigate to the href
of the hyperlink. Or, to put it another way, it provides native support for click and link tracking:
<ul> <li> <a href="/products/blaster" ping="/track/products/blaster">Blasters</a> </li> <li> <a href="/products/light-sabres" ping="/track/products/light-sabres">Light sabres (choice of colours)</a> </li> </ul>
However, there’s a word of warning from the WHATWG spec:
The ping attribute is redundant with pre-existing technologies like HTTP redirects and JavaScript in allowing Web pages to track which off-site links are most popular or allowing advertisers to track click-through rates.
So, if the ping attribute is redundant with pre-existing technologies, what’s the point of it? Well, the idea is that it gives users greater transparency in seeing what other requests may be made as a result of them clicking on a certain link. It’s this greater transparency that is why authors are being encouraged to use this attribute.
It’s been suggested that browsers should allow users to configure how ping notifications are handled e.g. by blocking some URL’s, only allow same origin URL’s, or disabling ping altogether. Browsers could also display the ping URL alongside the link location in the browser’s status bar.
Browser Support for the ping
Attribute
Current browser support for ping
is mixed. Safari and Chrome do support it, Firefox has support for it but by default it is disabled, and IE and Opera do not support it. It’s also worth noting that the ping
attribute is not in the current W3C HTML5 draft spec, but it is in the WHATWG HTML5 spec.
Summary
So that’s 3 new attributes that were added to the <a>
element in HTML5 — download
, media
, and ping
.
As you can see, when these gain better browser support, they will be quite useful and have lots of potential use cases.
If you can think of any unique ways these can be used, we’d love to hear your thoughts in the comments.
Source Link: http://www.sitepoint.com/new-html5-attributes-hyperlinks-download-media-ping/