Firefox 3 et les espaces de nom XML
Alors que je développais des évolutions pour CWE et le widget TV Programme TV par Télé-Loisirs, je me suis trouvé confronté à un bug assez spécial. Tous mes parsing RSS fonctionnaient, sauf un: celui du programme TV.
Après moultes recherche, je me suis rendu compte que Firefox 3 ne gère
plus les espace de nom XML de la même manière. Prenons l’exemple de la
balise très connue content:encoded. FireFox 2 la gèrait de la manière
suivante: var content = getElementsByTagName('encoded')[0] //content.namespace valait "content"
Or depuis la version 3.0 RC1 (et certainement les betas précédentes),
Firefox utilise la même méthode que IE, à savoir: var content = getElementsByTagName('content:encoded')[0]
C’est une évolution plutôt violente. En effet, tous les parsings DOM
utilisant des espaces de noms vont devoir tester la version du
navigateur. Pour ma part, je fais ce test: var prefix = ""; if(window.ie || navigator.userAgent.match(/Firefox\/3/)){ prefix="content:" } //... //et ensuite, dans mon parse item.getElementByTagName(prefix + "encoded")[0]
Cela permet à Firefox 2, Safari, Opera… de continuer à utiliser les récupération de balises simple avec un attribut de namespace, et pour IE et FireFox 3 d’utiliser les prefixs de namespace dans le nom de la balise.
Je suis plutôt choqué de ce virage pris par Firefox dans le sens où cela parait plus logique que content:encoded est une balise “encoded” de l’espace “content”…
Je ne sais pas si vous partagez mon opinion… mais je préférais l’ancienne méthode.