MindScape

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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
  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;
   

}

thunderbird中的XMLParser的使用:
DOMParser 组件, nsIDOMParsrer接口,
读取stream或string





posted on 2005-02-13 23:33  Jonny Yu  阅读(637)  评论(0编辑  收藏  举报