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 の再設定もお忘れなく。というか、忘れないように<自分。
#バグレポートに載ってるんだろうと思いつつ、探せず...

