Hatena::ブログ(Diary)

文殊堂 このページをアンテナに追加 RSSフィード Twitter

2011-02-07

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

前置き

IEでのa要素の各属性について - 文殊堂の続き。

IE 6,7 で相対URL -> 絶対 URL の変換 - #生存戦略 、それは - subtechを参考にして、

cloneNodeハックとlink.hrefによるURLの絶対URL化を組み合わせてみました。

jsdo.it - Share JavaScript, HTML5 and CSS

jsdo.it - Share JavaScript, HTML5 and CSS

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を同対応するかについては要検討。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/monjudoh/20110207/1297071182