XUL按钮不会出现

时间:2010-09-13 08:53:23

标签: javascript firefox firefox-addon xul

我是TryAgain的开发人员之一,这是一个Firefox附加组件,当网站无法加载时会显示自定义错误页面。它基本上用自定义版本替换Firefox的netError.xhtml

但是,我遇到了3.0。* - 3.6。*和Fx4b5之间的一些相当终端的兼容性问题。 (netError.dtd中的条目已重命名,导致一个版本或另一个版本中的XML解析错误。)

要解决这个问题,我决定让扩展动态修改页面,而不是完全替换它。我需要在Fx3中添加到netError.xhtml的元素之一是<xul:button>。但是,通过使用以下代码添加它,屏幕上不会显示任何内容:

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);

我在Mozilla开发人员中心看到there is this note

  

createElement的Gecko实现不符合XUL和XHTML文档的DOM规范:在创建的元素上,localName和namespaceURI未设置为null。有关详细信息,请参阅bug 280692

这需要什么,我该如何解决?

此外,如何通过JavaScript执行oncommand事件?

1 个答案:

答案 0 :(得分:1)

document.createElement()不接受限定名称。你传递的“xul:button”字符串使它创建一个名为“xul:button”的元素(==它的localName),而不是一个XUL“button”元素。

另一方面,在解析XML时,&lt; xul:button&gt;被解析为限定名称:解析器搜索对应于xul前缀的命名空间(来自其中一个父元素中的xmlns:xul=""定义)并在其找到的命名空间中创建“button”元素。

关于不符合XUL和(X)HTML的DOM规范的说明意味着您可以使用常规document.createElement("buttton")相应地在XUL或HTML文档中的XUL或HTML命名空间中创建元素。

或者你可以努力工作并使用:

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

或者甚至使用合格的名称,而不是有任何理由这样做:

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