[whatwg] URL decomposition on HTMLAnchorElement interface

Ian Hickson ian at hixie.ch
Tue Apr 28 17:28:58 PDT 2009

On Thu, 26 Mar 2009, Kartikaya Gupta wrote:
> It seems that major browsers all support URL decomposition on 
> HTMLAnchorElement, but this doesn't seem to be stated anywhere in the 
> HTML5 spec. The jQuery/tabs library seems to depend on this 
> (specifically, on the "hash" property) being available. Could the 
> HTMLAnchorElement interface be updated to reflect this?


On Thu, 26 Mar 2009, João Eiras wrote:
> Browsers also support partially setting each of the url fields 
> separately, although error handling between all of them is very 
> inconsistent. Note: if you specify this behavior, then you need to 
> specify what happens for http:, https:, data:, mailto: and unknown:


Browsers differ in how this is handled; the spec doesn't quite match any 
of them (it takes the most sane aspects of each browser I tested).

On Thu, 26 Mar 2009, Boris Zbarsky wrote:
> If you specify the setters then you also need to specify how this 
> affects the value of the "href" attribute in the DOM.  For example, in 
> Gecko if you have an <a href="foo#bar"> which has base URI 
> "http://example.com/" and you set anchor.hash on that anchor to "baz", 
> then the attribute value is changed to "http://example.com/foo#baz".  I 
> can't speak to what happens in other browsers.


On Thu, 26 Mar 2009, Kartikaya Gupta wrote:
> var a = document.createElement('a');
> a.setAttribute('href', 'http://example.org:123/foo?bar#baz');
> a.hostname = null;
> alert(a.hostname);       // displays "foo"
> alert(a.href);           // displays "http://foo/?bar#baz"

The spec says "null" and "http://null:123/foo?bar#baz".

If WebIDL changes to say that 'null' becomes "", then the spec says 
"example.org" and "http://example.org:123/foo?bar#baz" (setting 'host' or 
'hostname' to the empty string is ignored).

> a.setAttribute('href', 'scheme://host/path');
> a.host = null;
> alert(a.host);           // displays ""
> alert(a.pathname);       // displays ""
> alert(a.href);           // displays "scheme:////host/path"

If 'null' becomes "null": "null", "/path", and "scheme://null/path".

If 'null' becomes "": "host", "/path", and "scheme://host/path" (setting 
'host' or 'hostname' to the empty string is ignored).

On Thu, 26 Mar 2009, Biju wrote:
> var a = document.createElement('a');

Assuming a base URL of "http://example.com/path/":

> a.setAttribute('href', 'http:/Example.org:123/foo?bar#baz');   //Case 1
> alert(a.href);

Per spec: "http://example.com/Example.org:123/foo?bar#baz"

> a.setAttribute('href', 'http:example.org:123/foo?bar#baz');    //Case 2
> alert(a.href);

Per spec: "http://example.com/path/Example.org:123/foo?bar#baz"

> a.setAttribute('href', 'http:///example.org:123/foo?bar#baz');    //Case 3
> alert(a.href);

Per spec: "" (the URL can't be parsed).

> a.setAttribute('href', 'http://///example.org:123/foo?bar#baz');    //Case 4
> alert(a.href);

Per spec: "" (the URL can't be parsed).

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list