首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript加载XUL资源

使用javascript加载XUL资源
EN

Stack Overflow用户
提问于 2013-08-14 00:57:03
回答 3查看 349关注 0票数 3

如何使用javascript加载XUL资源?我试着在mdn上搜索,但找不到任何示例。

这里的动机是我想在没有id属性的元素上创建一个覆盖。

例如,假设我有以下xul文件:

代码语言:javascript
复制
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<button label="Test button" oncommand="alert('Hello World!');"/>

</window>

我想使用javascript加载这个xul文件,抓取按钮并将其附加到另一个元素。

如果能帮上忙,我们将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2013-08-14 03:25:03

您应该使用常规的DOM API。

您仍然可以在可能覆盖的地方覆盖元素,然后在适当的地方对其进行.appendChild()

或者完全使用DOM创建它,这可能是更好、更快的方法:

代码语言:javascript
复制
// XUL namespace is implied in XUL overlay scripts.
var btn = document.createElement("button");
btn.setAttribute("label", "Test Button");
btn.addEventListener("command", function() { alert("Hello World!"); }, false);
someElement.appendChild(btn);
票数 2
EN

Stack Overflow用户

发布于 2013-08-14 05:08:09

如果你想加载一个本地的javascript文件,那么有一个专门的帮助器:

代码语言:javascript
复制
//Check this for how the url should look like :
//https://developer.mozilla.org/en/mozIJSSubScriptLoader
function loadScript( url)
{
  var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader); 
  //The magic happens here
  loader.loadSubScript( url ); 
}

如果您想在XUL应用程序中加载本地HTML文件,那么出于安全风险的考虑,我认为这是不可能的。

票数 1
EN

Stack Overflow用户

发布于 2013-08-30 08:40:06

我不能百分之百地确定我是否完全理解了你的问题,但我会试着给出我的2点意见。

我的方法不能帮助您从与您正在使用的xul文件不同的xul文件中获取元素,我真的不知道这是否可能。

当我想要多次使用一个大的元素时,我通常会做的是,比如当我想创建一个丰富的richlistboxitems时,我会这样做:

我为这些项目创建了一个模板:

代码语言:javascript
复制
<richlistbox id="richlistbox"/>
<richlistitem id="richListItemTemplate" hidden="true">
   <listcell class="classOne" label="one" width="50"/>
   <listcell class="classTwo" label="two" width="80"/>
</richlistitem>

请注意,我隐藏了模板。

然后,当我加载包含富列表框的面板或页面时,我会动态填充它们,如下所示:

代码语言:javascript
复制
for(var i = 0; i < elements.length; i++) {
   var item = document.getElementById("richListItemTemplate").cloneNode(true);
   item.removeAttribute("id");
   item.removeAttribute("hidden");
   item.getElementsByClassName("classOne")[0].setAttribute("label",elements.value);
   item.getElementsByClassName("classTwo")[0].setAttribute("label",elements.value);

   document.getElementById("richlistbox").appendChild(item);
}

这样就克隆了原始元素,删除了id,但是可以通过元素中唯一的className访问它的子元素。

也许你可以对你的按钮做同样的事情。您使用id="myButtonTemplate"hidden="true"创建一个buttonTemplate,当您想要将它附加到一个元素时,您需要执行一个buttonTemplate.cloneNode (true ) (true,因为您想要所有的子元素),您可以按照您想要的方式对其进行自定义,然后将它附加到您想要的元素。

希望这对你有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18214945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档