2010-09-13 5 views
3

Je suis l'un des développeurs de TryAgain, un add-on Firefox, qui affiche une page d'erreur personnalisée lorsqu'un site web ne se charge pas. Il remplace essentiellement netError.xhtml de Firefox avec une version personnalisée.Le bouton XUL n'apparaît pas

Cependant, j'ai rencontré des problèmes de compatibilité assez terminaux entre 3.0. * - 3.6. * Et Fx4b5. (Une entrée dans netError.dtd a été renommé, ce qui provoque une erreur d'analyse XML dans l'une ou l'autre version.)

Pour résoudre ce problème, je l'ai décidé d'avoir l'extension dynamiquement modifier la page, par opposition à le remplacer complètement. L'un des éléments que j'ai besoin d'ajouter à netError.xhtml dans Fx3 est un <xul:button>. Cependant, en ajoutant avec le code suivant, rien n'apparaît à l'écran:

var div = document.getElementById("errorContent"); 
var btn = document.createElement("xul:button"); 
btn.setAttribute("label", "Hello world"); 
btn.setAttribute("oncommand", "alert('Hello world!');"); 
div.appendChild(btn); 

Je vois que sur le Mozilla Developer Center qui there is this note:

Gecko implementation of createElement doesn't conform to the DOM spec for XUL and XHTML documents: localName and namespaceURI are not set to null on the created element. See bug 280692 for details.

Qu'est-ce que cela occasionnerait et comment puis-je Résolvez le?

En outre, comment puis-je exécuter l'événement oncommand via JavaScript? Document.createElement() n'accepte pas les noms qualifiés.

+1

Avez-vous essayé avec createElementNS (» http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul "," xul: button ")? – lithorus

Répondre

1

La chaîne "xul: button" que vous passez lui permet de créer un élément appelé "xul: button" (== son localName), pas un élément "bouton" XUL.

D'autre part, lorsque l'analyse XML, < XUL: bouton> est analysé comme un nom qualifié: les recherches de l'analyseur pour l'espace de noms correspondant au préfixe XUL (à partir d'une définition xmlns:xul="" dans l'un des éléments parents) et crée la " bouton "élément dans l'espace de noms trouvé. La remarque concernant la non-conformité à la spécification DOM pour XUL et (X) HTML signifie que vous pouvez utiliser le document.createElement("buttton") habituel pour créer des éléments dans l'espace de noms XUL ou HTML dans un document XUL ou HTML, de manière correspondante.

Ou vous pouvez aller à la dure et de l'utilisation:

var XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
document.createElementNS(XUL_NS, "button") 

ou même avec le nom qualifié, et non pas qu'il n'y a aucune raison de le faire:

document.createElementNS(XUL_NS, "xul:button") 
+0

Merci pour l'explication. C'est logique; Je vais lui donner une balançoire dès que possible. –

+0

Effectivement, c'était l'affaire. Merci! –

+0

J'ai reçu [rapports de réception] (http://getsatisfaction.com/tryagain/topics/tryagain_error?utm_content=topic_link&utm_medium=email&utm_source=new_topic) que ce code provoque l'erreur suivante: 'Erreur: le composant a renvoyé le code d'échec: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMHTMLDocument.createElementNS] '. Il semble que Firefox parfois ne peut pas atteindre le serveur d'espace de noms? –