XUL 按钮不出现
我是 TryAgain(一款 Firefox 添加)的开发者之一-on,当网站加载失败时显示自定义错误页面。它实质上用定制版本替换了 Firefox 的 netError.xhtml
。
然而,我在 3.0.*-3.6.* 和 Fx4b5 之间遇到了一些相当严重的兼容性问题。 (netError.dtd 中的一个条目已被重命名,导致一个版本或另一个版本中出现 XML 解析错误。)
为了解决此问题,我决定让扩展动态修改页面,而不是以完全取代它。我需要添加到 Fx3 中的 netError.xhtml
的元素之一是
。但是,通过使用以下代码添加它,屏幕上不会显示任何内容:
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 开发人员中心看到 有这样一条注释:
createElement 的 Gecko 实现不符合 XUL 和 XHTML 文档的 DOM 规范:创建的元素上的 localName 和 namespaceURI 未设置为 null。有关详细信息,请参阅错误 280692。
这意味着什么?我该如何解决?
此外,如何通过 JavaScript 执行 oncommand
事件?
I'm one of the developers of TryAgain, a Firefox add-on, that displays a custom error page when a website fails to load. It essentially replaces Firefox's netError.xhtml
with a customized version.
However, I've run in to some fairly terminal compatibility problems between 3.0.*-3.6.* and Fx4b5. (An entry in netError.dtd has been renamed, causing a XML parse error in either one version or the other.)
To fix this, I've decided to have the extension dynamically modify the page, opposed to replacing it completely. One of the elements I need to add to netError.xhtml
in Fx3 is a <xul:button>
. However, by adding it with the following code, nothing appears on the screen:
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);
I see that on the Mozilla Developer Center that 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.
What does this entail, and how can I resolve it?
Furthermore, how can I execute the oncommand
event through JavaScript?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
document.createElement() 不接受限定名称。您传递的“xul:button”字符串使其创建一个名为“xul:button”的元素(==其
localName
),而不是XUL“button”元素。另一方面,当解析 XML 时,会被解析。被解析为限定名称:解析器搜索与 xul 前缀相对应的命名空间(来自父元素之一中的
xmlns:xul=""
定义),并在它找到的命名空间。关于不符合 XUL 和 (X)HTML DOM 规范的说明意味着您可以使用常规
document.createElement("buttton")
在 XUL 或 HTML 命名空间中创建元素相应地,HTML 文档。或者您可以采取困难的方式并使用:
甚至使用限定名称,但没有任何理由这样做:
document.createElement() doesn't accept qualified names. The "xul:button" string you pass makes it create an element called "xul:button" (== its
localName
), not a XUL "button" element.On the other hand when parsing XML, <xul:button> is parsed as a qualified name: the parser searches for namespace corresponding to the xul prefix (from a
xmlns:xul=""
definition in one of the parent elements) and creates the "button" element in the namespace it found.The note about not conforming to the DOM spec for XUL and (X)HTML means that you can use regular
document.createElement("buttton")
to create elements in the XUL or HTML namespace in a XUL or HTML document, correspondingly.Or you could go the hard way and use:
or even with the qualified name, not that there's any reason to do that: