簡體   English   中英

使用javascript加載XUL資源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM