locale文件:chrome\locale\messenger-newsblog\messenger-newsblog.dtd
(该locale文件不能使用notepad或uedit32保存,否则会比原文件多3个字节导致thunderbird解析失败,我这里使用VS.NET 2005进行编辑,原因不知......)
UI定义:\chrome\content\messenger-newsblog\subscriptions.xul
这个是thunderbird里管理RSS订阅对话框的UI定义,在这里加入按钮
实现代码:
\chrome\content\messenger-newsblog\subscriptions.js(响应用户和对话框的交互)
\chrome\content\messenger-newsblog\Feed.js(Feed类的实现,一个Feed就是一个data source, thunderbird可以支持RSS1/2, ATOM三种schema)
\chrome\content\messenger-newsblog\FeedItem.js(FeedItem类的实现,一个FeedItem对应每一个单独的post)
加入一个feed的调用序列:
1)buttonAdd.onclick ->doAdd()
2) doAdd() -> openFeedEditor(feedProperties) 打开属性编辑框。
3) doAdd() -> feed.download() 下载该feed,这里download是一个异步调用,其中打开一个xmlhttprequest对象并将实际的处理代码onDownloaded链接到xmlhttprequest.onload事件,最后调用request.send()发出请求。
4)feed.onDownloaded() -> feed.parse parse根据具体的schema调用对应的parse方法。
打开文件的对话框:使用@mozilla.org/filepicker;1
thunderbird中的XMLParser的使用:
DOMParser 组件, nsIDOMParsrer接口,
读取stream或string
(该locale文件不能使用notepad或uedit32保存,否则会比原文件多3个字节导致thunderbird解析失败,我这里使用VS.NET 2005进行编辑,原因不知......)
UI定义:\chrome\content\messenger-newsblog\subscriptions.xul
这个是thunderbird里管理RSS订阅对话框的UI定义,在这里加入按钮
实现代码:
\chrome\content\messenger-newsblog\subscriptions.js(响应用户和对话框的交互)
\chrome\content\messenger-newsblog\Feed.js(Feed类的实现,一个Feed就是一个data source, thunderbird可以支持RSS1/2, ATOM三种schema)
\chrome\content\messenger-newsblog\FeedItem.js(FeedItem类的实现,一个FeedItem对应每一个单独的post)
加入一个feed的调用序列:
1)buttonAdd.onclick ->doAdd()
2) doAdd() -> openFeedEditor(feedProperties) 打开属性编辑框。
3) doAdd() -> feed.download() 下载该feed,这里download是一个异步调用,其中打开一个xmlhttprequest对象并将实际的处理代码onDownloaded链接到xmlhttprequest.onload事件,最后调用request.send()发出请求。
4)feed.onDownloaded() -> feed.parse parse根据具体的schema调用对应的parse方法。
打开文件的对话框:使用@mozilla.org/filepicker;1
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
var extbundle = strBundleService.createBundle("chrome://messenger/locale/messenger.properties");
var filterLabel = "邮件文件(.eml)";
var windowTitle = "打开消息";
fp.init(window, windowTitle, nsIFilePicker.modeOpen);
fp.appendFilter(filterLabel, "*.eml");
// Default or last filter is "All Files"
fp.appendFilters(nsIFilePicker.filterAll);
try {
var ret = fp.show();
if (ret == nsIFilePicker.returnCancel)
return;
}
catch (ex) {
dump("filePicker.chooseInputFile threw an exception\n");
return;
}
var uri = fp.fileURL;
}
var extbundle = strBundleService.createBundle("chrome://messenger/locale/messenger.properties");
var filterLabel = "邮件文件(.eml)";
var windowTitle = "打开消息";
fp.init(window, windowTitle, nsIFilePicker.modeOpen);
fp.appendFilter(filterLabel, "*.eml");
// Default or last filter is "All Files"
fp.appendFilters(nsIFilePicker.filterAll);
try {
var ret = fp.show();
if (ret == nsIFilePicker.returnCancel)
return;
}
catch (ex) {
dump("filePicker.chooseInputFile threw an exception\n");
return;
}
var uri = fp.fileURL;
}
thunderbird中的XMLParser的使用:
DOMParser 组件, nsIDOMParsrer接口,
读取stream或string