XUL 按钮不出现

发布于 2024-09-19 02:34:49 字数 1188 浏览 6 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光倒影 2024-09-26 02:34:49

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

另一方面,当解析 XML 时,会被解析。被解析为限定名称:解析器搜索与 xul 前缀相对应的命名空间(来自父元素之一中的 xmlns:xul="" 定义),并在它找到的命名空间。

关于不符合 XUL 和 (X)HTML DOM 规范的说明意味着您可以使用常规 document.createElement("buttton") 在 XUL 或 HTML 命名空间中创建元素相应地,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")

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:

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

or even with the qualified name, not that there's any reason to do that:

document.createElementNS(XUL_NS, "xul:button")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文