【JavaScript】リンクオブジェクトのhref参照時のブラウザ毎の振る舞いの違い
JavaScriptでリンクオブジェクトのhrefを参照したときの振る舞いが、ブラウザ毎に異なることに気がつきました。
きっと常識なんでしょうけど……。
例えば、UTF-8のページ上で、日本語がエンコードされた参照先(URI)を持つ
JavaScriptにより当該リンクオブジェクトを取得し、そのhrefの値を適当な変数に入れてから表示すると、IE6では'%E6'以下が化けてしまいますし、Operaでは日本語に変換されてしまいます。
<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したもの |
どうやら、
- IE6 SP2では、勝手にunescapeされてしまう。
- Opera9.10では、勝手にdecodeURIされてしまう。
- 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)の扱いも調べておいた方がいいかなぁ?
昨日IE7を入れてみたら、escapeは行わないようになっているみたいだったので追記。
あとは、日本語ドメイン名(というかIDN)の扱いも調べておいた方がいいかなぁ?
例えば、日本語.jpをどのように扱われているか、など。
« りんくぽっぷ:いまみてるページのリンクリストを表示するブックマークレット/Greasemonkey/SeaHorse | トップページ | 【JavaScript】IE6におけるtable要素の初期化 »
「パソコン・インターネット」カテゴリの記事
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- BIGLOBE光ネクスト(大阪)の通信速度問題 - プロバイダ選びは難しい……(2015.08.13)
- BOOK☆WALKER さんに関して最近経験した不安と不満(2015.08.10)
- 『#鳥獣戯画制作キット』が楽しい(2015.07.01)
「覚書」カテゴリの記事
- 鍛高譚 ~ カレイにまつわる物語(2018.05.25)
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
« りんくぽっぷ:いまみてるページのリンクリストを表示するブックマークレット/Greasemonkey/SeaHorse | トップページ | 【JavaScript】IE6におけるtable要素の初期化 »
コメント