Firefox addon Mozilla Thunderbird插件-创建任务
我是Mozilla插件开发的初学者。我需要一些帮助来开发一个功能ie。分配任务管理器它就像闪电插件 当我点击一个按钮时,会弹出一个窗口,询问主题、开始日期、截止日期、分配给(电子邮件ID)。当我们点击SaveandSend时,它会发送一封RSVP(邀请邮件)。如果用户接受邀请,则应在sqlite数据库中进行更新。如何做到这一点。任何有代码或建议的人。我认为我们需要在这个插件中使用谷歌日历,但我不知道如何在插件开发中使用它来创建任务和发送邀请 还有.ics文件的用途,如果有人知道,请告诉我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文件的用途,如果有人知道,请告诉我 谢谢。
谢谢。我将非常感谢您。以下是我最近完成的一项任务的示例:
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);
}