有没有办法可以找到历史记录中给定名称的所有元素。在我的firefox插件中,我在表单历史中添加了一些特定名称下的元素 - 以免说“搜索描述”。
我现在想要获得我在此名称下添加的所有元素。我看到我可以得到一个历史对象:
this.Ci = Components.interfaces;
this.Cc = Components.classes;
var historyObj = this.Cc["@mozilla.org/satchel/form-history;1"].getService(this.Ci.nsIFormHistory2 || this.Ci.nsIFormHistory);
但nsIFormHistory或nsIFormHistory2接口没有任何函数,如:
getAllEntries(name)
任何人都可以帮助我吗?
答案 0 :(得分:0)
通常,nsIFormHistory2.DBConnection
属性用于查询,您可以直接访问SQLite表。像这样(未经测试):
var completionListener =
{
handleCompletion: function(reason) {},
handleError: function(error) {},
handleResult: function(result)
{
var values = [];
while (true)
{
var row = result.getNextRow();
if (!row)
break;
values.push(row.getResultByName("value"));
}
alert("Autocomplete values: " + values);
}
};
var query = "SELECT value " +
"FROM moz_formhistory " +
"WHERE fieldname='search-description'";
var statement = historyObj.DBConnection.createAsyncStatement(query);
historyObj.DBConnection.executeAsync([statement], 1, completionListener);
请注意,此处建议使用async API,查询数据库可能需要一些时间。