[ajax] Operaの名前空間接頭辞付要素の属性名

kawa.net 本サイトのトップページに、はてなの人気エントリーと、flickr の写真、
新着コメント、新着トラックバックを RSS で取得して表示させるようにしました。
ajax では外部サイトの RSS はりようできないので、はてなと flickr の RSS は
予めミラーリングさせたものを利用しています。
しかし、手元の Opera 8.5ではエラーに遭遇。ちゃんと内容が表示されなかった。
RDF(RSS 1.0)形式なら問題ないのに、RSS 2.0 のファイルではエラーが出る。

http://www.kawa.net/xp/index-j.html (今は直ってます)

原因を探っていくと、Opera(少なくとも Opera 8.5)の XML パーサでは、
名前空間接頭辞(ネームスペースプリフィックス)がついている要素に
含まれる属性(attributes)の属性名は、その要素の名前空間接頭辞が
自動的に付与されていることが判明。

<media:text type="html">Hello, World!</media:text>

という要素があれば、Opera では自動的に

<media:text media:type="html">Hello, World!</media:text>

読み替えられてしまう。名前空間接頭辞が media なので、
その配下の属性名が type ⇒ media:type となるのです。
IE/Opera では、もとの属性名 type のまま読み出せます。
DOM の仕様としてどちらが正しいのかは、詳しくないので分かりませんが、

こんなところでブラウザごとの挙動が違うと、面倒ですねー。
今の所は、属性名に名前空間接頭辞が付いても付かなくても、
どちらでも処理できるように、JavaScript 側で対応していますが、
Opera のバグ(または仕様変更)ということで直してくれると良いのだけど。。。

※名前空間接頭辞 (Namespace prefix) について詳しくは↓。
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou07/learning-xml07.html
http://www.atmarkit.co.jp/fxml/rensai/rexml06/rexml06.html

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック