« りんくぽっぷ:いまみてるページのリンクリストを表示するブックマークレット/Greasemonkey/SeaHorse | トップページ | 【JavaScript】IE6におけるtable要素の初期化 »

2007/12/04

【JavaScript】リンクオブジェクトのhref参照時のブラウザ毎の振る舞いの違い

JavaScriptでリンクオブジェクトのhrefを参照したときの振る舞いが、ブラウザ毎に異なることに気がつきました。
きっと常識なんでしょうけど……。
例えば、UTF-8のページ上で、日本語がエンコードされた参照先(URI)を持つ
<a href="http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E" id="testlink">http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E</a>
のようなリンク(http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E)がある場合。
JavaScriptにより当該リンクオブジェクトを取得し、そのhrefの値を適当な変数に入れてから表示すると、IE6では'%E6'以下が化けてしまいますし、Operaでは日本語に変換されてしまいます。
1.元のURI
2.リンクオブジェクトのhref値
3.1をunescapeしたもの
4.1をdecodeURIしたもの
5.3をescapeしたもの
6.4をencodeURIしたもの
どうやら、
  1. IE6 SP2では、勝手にunescapeされてしまう。
  2. Opera9.10では、勝手にdecodeURIされてしまう。
  3. Firefox2.0.0.11やIE7では、特に変換は行わない。
という動きのように思えます。
Operaの場合はencodeURIしてやれば元に戻るのでまだましですが、IE6の場合、単純にescapeしてやると、':'が'%3A'になったりといやらしい動きになってしまいます……うーむ、何か上手い方法あるでしょうか?
とりあえず、escape(href).replace(/%[0-7][a-f\d]/gi,function(s){return unescape(s)}) とか考えてみましたが。
【2008/01/27追記】
昨日IE7を入れてみたら、escapeは行わないようになっているみたいだったので追記。
あとは、日本語ドメイン名(というかIDN)の扱いも調べておいた方がいいかなぁ?
例えば、日本語.jpをどのように扱われているか、など。

« りんくぽっぷ:いまみてるページのリンクリストを表示するブックマークレット/Greasemonkey/SeaHorse | トップページ | 【JavaScript】IE6におけるtable要素の初期化 »

パソコン・インターネット」カテゴリの記事

覚書」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« りんくぽっぷ:いまみてるページのリンクリストを表示するブックマークレット/Greasemonkey/SeaHorse | トップページ | 【JavaScript】IE6におけるtable要素の初期化 »

戻るリンク追加

カレンダー

2022年4月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

ココログカレンダーPlus(旧2)

検索


    • Web全体 サイト内
    • 蔵書のISBNを入力して下さい
    • はじめる前
      初級者向け
      上級者向け
      ブログ紹介
      結果を表示

コメントリストツリー化

無料ブログはココログ