在我的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方法不会让你创建标签,当你不打算。 –