在我的Firefox擴展中,我有一個簡單的樹,它有兩列。我試圖以編程方式:如何添加和刪除Firefox插件中的行XUL樹
- 添加一行
- 刪除所有行
我的XUL樹:
<tree flex="1" id="mytree" hidecolumnpicker="true">
<treecols>
<treecol id="sender" label="Sender" flex="1"/>
<treecol id="subject" label="Subject" flex="2"/>
</treecols>
<treechildren>
</treechildren>
</tree>
的Javascript我試圖添加行:
// trying to add rows
var data = {
{'sender' : 'John', 'subject' : 'something'},
{'sender' : 'Adam', 'subject' : 'something else'},
{'sender' : 'Bob', 'subject' : 'something else again'}
};
document.getElementById("mytree").view.data = data;
有沒有錯誤這只是樹沒有得到添加的行。我知道代碼運行,因爲如果我添加一個alert()
它會觸發。
的Javascript我試圖刪除所有行:
var tree = document.getElementById("mytree");
tree.view.data = {};
tree.view.treeBox.rowCountChanged(0, -1);
這將產生一個錯誤:
document.getElementById("mytree").view.treeBox is undefined
編輯:
弗拉基米爾的建議,直接添加XUL元素後,這將增加一行:
var treeChildren = document.getElementById("my_tree_children");
var treeitem = document.createElement('treeitem');
var treerow = document.createElement('treerow');
var treecell_1 = document.createElement('treecell');
var treecell_2 = document.createElement('treecell');
treecell_1.setAttribute('label', 'John');
treecell_2.setAttribute('label', 'something');
treerow.appendChild(treecell_1);
treerow.appendChild(treecell_2);
treeitem.appendChild(treerow);
treeChildren.appendChild(treeitem);
儘管在此示例中進行了硬編碼,但單元格的值(標籤屬性)將來自用戶輸入。將用戶輸入直接放入XUL元素的屬性時,應該使用什麼編碼/轉義方法來防止XSS?
不,你應該使用['textContent'](https://developer.mozilla.org/en/DOM/Node.textContent)而不是'innerHTML'。但這不是問題 - 要顯示在「treecell」中的文本應該放入'label'屬性中,參見['setAttribute'](https://developer.mozilla.org/en/DOM/element.setAttribute )。 –
@WladimirPalant你是對的。它使用'setAttribute()'。最後一個問題 - 在XUL屬性上防止XSS的最佳做法是什麼,因爲內容將來自用戶輸入 - 請參閱我的編輯。 – ServerBloke
不要使用'innerHTML' :)其他DOM方法不會讓你創建標籤,當你不打算。 –