How cross browser is the ping attribute of anchor elements?
Solution 1:
The ping
attribute was included in pre-W3C drafts of HTML5. It remained in W3C drafts of HTML5 up until early 2010 - the last draft to include it was W3C Working Draft 4 March 2010; the next draft was W3C Working Draft 24 June 2010.
Why was it removed? It was massively unpopular - an HTML feature designed for advertisers to track clicks on adverts. Hixie's argument was that they can already do that; ping
just made the process more transparent. And browsers would be able to offer a feature to block ping
tracking. The counter-argument to that is that if browsers had this feature, publishers would avoid ping
, it being unreliable compared to current click-tracking techniques.
Some browsers support it because of a combination of:
- They implemented it early, and haven't felt a need to remove it; and
- They support the WHATWG spec instead of or as well as the W3C spec.
Browsers that support it seem to be Safari and Chrome. (It's no surprise that the latter does; it originally used Safari's WebKit as its layout engine, and now uses Blink, a fork of WebKit.) Firefox also supports it, but since 2008, support has been disabled by default - it can be enabled through about:config, though I don't suppose many people do.
Internet Explorer does not support it (yet?). Opera 12.x does not support the attribute, but I haven't checked in Opera's next generation of Blink-based browsers.
Solution 2:
You can also see the support with the Wikipedia article Comparison of layout engines (HTML5) for WebKit, Gecko, etc.
It appears to be a potential privacy invasive attribute as well, being able to send data to third parties. It is disabled by default in the browsers that support it.
Note: as null said, this post has not been updated since 2012!
Solution 3:
According to deanhume.com only Safari and Google Chrome supports it and maybe Firefox also supports it because in their documentation they are not flagged with the warning "This API has not been standardized." So W3Schools may be right :)
Solution 4:
Nowadays we have navigator.sendBeacon()
which makes an http request that continues in the background after navigation if needed, and unlike ping, which is not enabled by default in firefox, this method is supported by all major browsers.
Also, fetch requests have 'keepalive' option, which allows them to continue after navigation.