続・IEでのa要素の各属性について

前置き

IEでのa要素の各属性について - 文殊堂の続き。
IE 6,7 で相対URL -> 絶対 URL の変換 - #生存戦略 、それは - subtechを参考にして、
cloneNodeハックとlink.hrefによるURLの絶対URL化を組み合わせてみました。
http://jsdo.it/monjudoh/o2Mk
http://jsdo.it/monjudoh/9aHd
link.hrefによるURLの絶対URL化はIE6,7では使えないので割愛。

検証

IE6

なぜかhostnameがiframeではなく外側のものになってしまっている。
少なくとも短いURLについてはouterHTMLハックを使った場合に各属性の値をちゃんと取れていたので、
そっちを使ったほうが良さそう。

a要素の各属性(cloneNodeハック)
---url.length:11
href:[http://jsdo.it/a?1111#hash] 
, search:[?1111]
, protocol:[http:]
, hostname:[jsdo.it]
, port:[80]
, pathname:[a]
, hash:[#hash]
---url.length:4097
href:[[object Error]] 
, search:[[object Error]]
, protocol:[[object Error]]
, hostname:[[object Error]]
 , port:[[object Error]]
 , pathname:[[object Error]]
 , hash:[[object Error]]
IE7

IE6同様hostnameがiframeではなく外側のものになってしまっている。
短いURLについてはouterHTMLハックを使用したほうが良さそう。
長いURLの場合にprotocol,portが正しく取得できるというメリットはある模様。

---url.length:11
href:[http://jsdo.it/a?1111#hash] 
, search:[?1111]
, protocol:[http:]
, hostname:[jsdo.it]
, port:[80]
, pathname:[a]
, hash:[#hash]
---url.length:4097
href:[http://jsdo.it/a?1(略)1#ha] 
, search:[?1(略)1]
, protocol:[http:]
, hostname:[jsdo.it]
, port:[80]
, pathname:[a]
, hash:[#ha]

IE8

cloneNodeハックのみ使用した場合はIE7とほぼ同じ。

---url.length:11
href:[http://jsrun.it/a?1111#hash] 
, search:[?1111]
, protocol:[http:]
, hostname:[jsdo.it]
, port:[80]
, pathname:[a]
, hash:[#hash]
---url.length:4122
href:[http://jsrun.it/a?1(略)1] 
, search:[?1(略)1]
, protocol:[http:]
, hostname:[jsdo.it]
, port:[80]
, pathname:[a]
, hash:[]

cloneNodeハックとlink.hrefを併用するとほぼ問題なく各属性の値を取れる模様。
outerHTMLハック使用時の結果がIE6,7と違い惨憺たるものだったので助かります。

---url.length:11
link.href:[http://jsrun.it/a?1111#hash]
,href:[http://jsrun.it/a?1111#hash] 
, search:[?1111]
, protocol:[http:]
, hostname:[jsrun.it]
, port:[80]
, pathname:[a]
, hash:[#hash]
---url.length:4122
link.href:[http://jsrun.it/a?1(略)1#hash]
,href:[http://jsrun.it/a?1(略)1] 
, search:[?1(略)1]
, protocol:[http:]
, hostname:[jsrun.it]
, port:[80]
, pathname:[a]
, hash:[]

結論

IE6,7ではouterHTMLハック、IE8ではcloneNodeハックとlink.hrefによるURLの絶対URL化の組み合わせを使うのが良さそう。
長いURLを同対応するかについては要検討。