日期:2014-01-22 浏览次数:20689 次
Whilst working on the Ajax Link Tracker and MapSurface I have come across an inconsistency in how the href attribute is retrieved using DOM Scripting.
The href attribute is different to other element attributes in that the value set can be relative to the context of the page URL. If you set a link with a relative href attribute
<a href="../development/test1.html">test page</a>
The browser will look at the pages current URL and derive an absolute URL for the link.
http://www.glenn.jones.net/development/test1.html
This is the root of the problem, some browsers return the text of the attribute and others return the derived absolute URL. The results also differ by the method you use to retrieve the href attribute. There are three common ways to access an attribute:
linkobj.href; linkobj[‘href’]; linkobj.getAttribute(‘href’);
The linkobj.href
and linkobj[‘href’];
methods of accessing the attribute consistently return the derived absolute URL.
Microsoft has tried to address this by problem adding a second parameter to the getAttribute method. The second parameter can be set to 0,1 or 2. If the parameter is set to 2 the method returns the attribute text. Any other setting will return the derived absolute URL.
linkobj.getAttribute(‘href’); linkobj.getAttribute(‘href’,2);
Derived Absolute URL |
Attribute Text | ||
---|---|---|---|
IE | linkobj.href; | x | |
IE | linkobj.getAttribute(‘href’); | x | |
IE | linkobj.getAttribute(‘href’,2); | x | |
Gecko | linkobj.href; | x | |
Gecko | linkobj.getAttribute(‘href’); | x | |
Gecko | linkobj.getAttribute(‘href’,2); | x | |
Opera | linkobj.href; | x |