A Day in the Life

IE 6,7 で相対URL -> 絶対 URL の変換

IE 6,7 で相対URL -> 絶対 URL の変換

canonical リンクの取得で変換が必要になった。IE6,7 は link 要素の href にプロパティアクセス、attr アクセスすると、相対 URL が指定されてる場合はまんま相対 URL を返す。

そんなとき絶対 URL に変換する一番楽なのは A 要素の href を利用して、cloneNode するといいよ、と nanto_terapad さんに教えてもらった。BK! BK!

var a = document.createElement('a');
a.setAttribute('href', link.href);
a.href; // この時点では相対 URL
a.cloneNode(false).href; // これで絶対 URL

ちなみに link.cloneNode(false).href では相対 URL のまんまだった。

IE 8 では

URLタイプのDOM属性は、コンテンツ属性と区別されるようになりました。例 : A href (DOM 属性) != A .getAttribute('href') ( コンテンツ属性)URL タイプの DOM 属性は常に絶対 URL を返し、コンテンツ属性はソースに指定された文字列を返します。これらの変更は、 Attr.value と getAttributeNode にも適用されます。具体的に説明します。

・ 絶対 URL を返すようになった DOM属性を持つ要素は、applet [codebase] 、base [href] 、body [background] 、del [cite] 、form [action] 、frame [src, longdesc] 、head [profile] 、iframe [src, longdesc] 、img [longdesc] 、ins [cite] 、link [href] 、object [codebase, data] 、q [cite] 、script [src] です。

・ 相対 URL を返すようになったコンテンツ属性を持つ要素は、a [href] 、area [href] 、img [src] 、input [src] です。 no title

らしいので、link は絶対URLを返すようになった。

記事の一覧 >