2005年12月07日

javascript: link.href を変更するとリンクテキストが壊れます

(自己メモ)

javascript で ドキュメント内にある link (aタグ) の href を書き換えようと思っていろいろやっていたときに不思議な挙動(不具合?)を見つけたのでメモ。

たとえば、ページ内のリンク URL にすべて ?no-rss という引き数を(あとからスクリプトで)追加したい、とします。

そんなときは次のような javascript を埋め込めば簡単に実現できます。

<script type="text/javascript">
<!--
var links = document.links;
for (var i = 0; i < links.length; i++){
 if (links[i].href.indexOf("http://akalabo.net/") == 0){
  links[i].href += "?no-rss";
 }
}
//-->
</script>


もちろん、DOM で getElementById() + setAttribute("href", 値) とやっても構いません。
#古いブラウザ考えて とりあえず Link オブジェクトを使っています。


さて、これで OK なはず・・・と、思いますよね。。。

ところが・・・
#いや、ひょっとしたら常識なのかもしれないので怖いのですが。。。


例えば

<a href="/">トップに戻る</a>

というリンク。

これは問題なく

<a href="/?no-rss">トップに戻る</a>

と変換されます。


が、リンクテキストの中に「@」マークが「途中」に含まれているものがあったとします。

たとえばこんなやつ。

<a href="/">トップ@戻る</a>


これが Win IE6 だと、次のように変換(表示)されてしまうのです。

<a href="/?no-rss">http://akalabo.net/?no-rss</a>


はい、リンクテキストが壊れます。


どうも、テキスト中の「@」マークが悪さをしている模様。
#Firefox などではこの問題は発生しません。


ということで、もし link.href をセットするスクリプトを実行しているなら、直後に link.innerText や link.innerHTML の再設定もお忘れなく。というか、忘れないように<自分。


#バグレポートに載ってるんだろうと思いつつ、探せず...

投稿者 aka : 時刻 19:01 | 固定リンク | トラックバック