Firefox addon Mozilla Thunderbird插件-创建任务

Firefox addon Mozilla Thunderbird插件-创建任务,firefox-addon,google-calendar-api,mozilla,add-on,thunderbird-addon,Firefox Addon,Google Calendar Api,Mozilla,Add On,Thunderbird Addon,我是Mozilla插件开发的初学者。我需要一些帮助来开发一个功能ie。分配任务管理器它就像闪电插件 当我点击一个按钮时,会弹出一个窗口,询问主题、开始日期、截止日期、分配给(电子邮件ID)。当我们点击SaveandSend时,它会发送一封RSVP(邀请邮件)。如果用户接受邀请,则应在sqlite数据库中进行更新。如何做到这一点。任何有代码或建议的人。我认为我们需要在这个插件中使用谷歌日历,但我不知道如何在插件开发中使用它来创建任务和发送邀请 还有.ics文件的用途,如果有人知道,请告诉我 谢谢。

我是Mozilla插件开发的初学者。我需要一些帮助来开发一个功能ie。分配任务管理器它就像闪电插件

当我点击一个按钮时,会弹出一个窗口,询问主题、开始日期、截止日期、分配给(电子邮件ID)。当我们点击SaveandSend时,它会发送一封RSVP(邀请邮件)。如果用户接受邀请,则应在sqlite数据库中进行更新。如何做到这一点。任何有代码或建议的人。我认为我们需要在这个插件中使用谷歌日历,但我不知道如何在插件开发中使用它来创建任务和发送邀请

还有.ics文件的用途,如果有人知道,请告诉我


谢谢。我将非常感谢您。

以下是我最近完成的一项任务的示例:

var dJsm = Components.utils.import("resource://gre/modules/Downloads.jsm").Downloads;
var tJsm = Components.utils.import("resource://gre/modules/Task.jsm").Task;
var fuJsm = Components.utils.import("resource://gre/modules/FileUtils.jsm").FileUtils;

var view = {
    onDownloadChanged: function(download) {
        cDump(download, 'Changed');
        if (download.succeeded) {
            var file = fuJsm.File(this.target.path));
            cDump(file,'file);
        }
    }
  };
tJsm.spawn(function () {

  let list = yield dJsm.getList(Downloads.ALL);
    list.addView(view);
 //list.removeView(view);

}).then(null, Components.utils.reportError);

                    function cDump(obj,title) {
                        var tstr = '';
                        var bstr = '';
                        var fstr = '';
                        for (var b in obj) {
                            try {
                                bstr += b + '=' + obj[b] + '\n';
                            } catch (e) {
                                fstr = b + '=' + e + '\n';
                            }
                        }
                        tstr += '<b>BSTR::</b>\n' + bstr;
                        tstr += '\n<b>FSTR::</b>\n' + fstr;
                        var cWin = Services.wm.getMostRecentWindow('navigator:browser');
                        var onloadFunc = function () {
                            cWin.gBrowser.selectedTab = cWin.gBrowser.tabContainer.childNodes[cWin.gBrowser.tabContainer.childNodes.length - 1];
                            newTabBrowser.removeEventListener('load', onloadFunc, true);
                            if (title) { newTabBrowser.contentDocument.title = title; }
                            newTabBrowser.contentDocument.body.innerHTML = tstr.replace(/\n/g, '<br>')
                        };
                        var newTabBrowser = cWin.gBrowser.getBrowserForTab(cWin.gBrowser.addTab('about:blank'));
                        newTabBrowser.addEventListener('load', onloadFunc, true);
                    }
var dJsm=Components.utils.import(“resource://gre/modules/Downloads.jsm下载;;
var tJsm=Components.utils.import(“resource://gre/modules/Task.jsm1.任务;
var fuJsm=Components.utils.import(“resource://gre/modules/FileUtils.jsm)。档案;
变量视图={
onDownloadChanged:函数(下载){
cDump(下载“更改”);
if(下载成功){
var file=fuJsm.file(this.target.path));
cDump(文件,'file);
}
}
};
tJsm.spawn(函数(){
let list=yield dJsm.getList(Downloads.ALL);
list.addView(视图);
//list.removeView(视图);
}).then(null,Components.utils.reportError);
功能cDump(对象,标题){
var tstr='';
var bstr='';
var fstr='';
用于(obj中的var b){
试一试{
bstr+=b+'='+obj[b]+'\n';
}捕获(e){
fstr=b+'='+e+'\n';
}
}
tstr+='BSTR::\n'+BSTR;
tstr+='\nFSTR::\n'+fstr;
var cWin=Services.wm.getMostRecentWindow('navigator:browser');
var onloadFunc=函数(){
cWin.gBrowser.selectedTab=cWin.gBrowser.tabContainer.childNodes[cWin.gBrowser.tabContainer.childNodes.length-1];
newTabBrowser.removeEventListener('load',onloadFunc,true);
if(title){newTabBrowser.contentDocument.title=title;}
newTabBrowser.contentDocument.body.innerHTML=tstr.replace(/\n/g,“
”) }; var newTabBrowser=cWin.gBrowser.getBrowserForTab(cWin.gBrowser.addTab('about:blank'); newTabBrowser.addEventListener('load',onloadFunc,true); }