IE で a 要素を使って相対 URL からスキームを得る ― 2014年11月09日 20時22分
いくつかのブラウザではURLがhttpの相対リンクであってもelm.protocolが「:」や空文字になったりする
この「いくつかのブラウザ」とは IE のことを指していると思われますが、href
プロパティに絶対 URL を設定しなおすことで、URL のスキーム部分を取得できるようになります。
// http://www.example.org/ 上で実行しているものとする。
var elm = document.createElement('a');
elm.href = '/foo?bar#baz';
// IE 6 / 7 で絶対 URL を設定。
// elm.href = elm.cloneNode(false).href でもよい。
elm.href = elm.getAttribute('href', 4);
// IE (少なくとも 8 ~ 11) で絶対 URL を設定。
elm.href += '';
elm.protocol // => "http:"
elm.hostname // => "www.example.org"
elm.href // => "http://www.example.org/foo?bar#baz"
しかし IE 6 / 7 の、getAttribute
メソッドの第 2 引数に値 4
を渡すことで絶対 URL の値が返るという挙動は、いつ実装されいつ文書化されたのでしょうか?
modern.IE で配布されている IE 6 SP 3 検証環境では確かに動作するのですが、「IE の getAttribute / setAttribute」を書いた時点 (2005 年 10 月) では文書化されていなかった気がします。文書化されていたのなら、「IE 6,7 で相対URL -> 絶対 URL の変換 - #生存戦略 、それは - subtech」にまとめられたような cloneNode
メソッドを使った手法を考えることもなかったでしょうから。
なお、「続・IEでのa要素の各属性について - 文殊堂」で言及されていますが、IE 6 / 7 では iframe
要素内の文書で上述の相対 URL 解決手法を用いると、(a
要素を文書木に挿入しない限り) 解決結果のホスト部分が親文書のものになってしまうようです。(ホスト部分が親文書のものになるという現象自体は IE 11 でも発生します。)
コメント
トラックバック
このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2014/11/09/7487263/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。