[英]Load XUL resource using javascript
如何使用javascript加载XUL资源? 我试图搜索mdn但找不到任何例子。
这里的动机是我想在没有id属性的元素上创建叠加层。
比方说,我有以下xul文件:
<?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文件,抓住按钮并将其附加到另一个元素。
帮助将不胜感激。
您应该使用常规DOM API。
您仍然可以在可能覆盖的地方覆盖元素,然后在适当的时候覆盖.appendChild()
。
或者使用DOM API完全创建它,这可能是更好,更快的方式:
// 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);
如果你想加载一个本地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文件,那么由于安全风险我不认为这是可能的(任何更多)。
如果我完全理解你的问题,我不是百分百肯定,但我会试着给我2美分。
我的方法无法帮助您从正在使用的文件中获取不同xul文件中的元素,即使可能,我也不知道。
当我想多次使用大元素时,我通常会做什么,比如当我想创建例如richlistboxitems时,我所做的是:
我为项目创建了一个模板:
<richlistbox id="richlistbox"/>
<richlistitem id="richListItemTemplate" hidden="true">
<listcell class="classOne" label="one" width="50"/>
<listcell class="classTwo" label="two" width="80"/>
</richlistitem>
请注意,我隐藏了模板。
然后,当我加载包含richlistbox的面板或页面时,我动态填写它们:
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),你自定义它以你想要的方式然后将它附加到你想要的元素。
希望这对你有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.