我目前正在进行chrome扩展程序,其中一项功能包括拥有待办事项列表。
我有一些代码可以检查任务,并在任务执行时显示通知。
当用户单击通知按钮时,它将触发基于该按钮的功能。
这是我的代码:
function getDateTime() {
var now = new Date();
var year = now.getFullYear();
var month = now.getMonth() + 1;
var day = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
if (month.toString().length == 1) {
month = '0' + month;
}
if (day.toString().length == 1) {
day = '0' + day;
}
if (hour.toString().length == 1) {
hour = '0' + hour;
}
if (minute.toString().length == 1) {
minute = '0' + minute;
}
if (second.toString().length == 1) {
second = '0' + second;
}
var dateTime = year + '/' + month + '/' + day + ' ' + hour + ':' + minute + ':' + second;
chrome.storage.sync.get(['importantTasks'], function(result) {
var elements = JSON.parse(result.importantTasks);
var currentDate = month + ' ' + day + ', ' + year;
var currentTime = hour + ':' + minute;
for (var i = 0; i < elements.length; i++) {
var taskTitle = elements[i].name;
var taskDate = elements[i].date;
var taskTime = elements[i].time;
if (currentDate === taskDate && currentTime === taskTime && second === '00') {
var myNotificationID = null;
chrome
.notifications
.create('', {
type: 'basic',
iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png',
title: taskTitle,
buttons: [{
title: 'Dismiss',
iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png'
},
{
title: 'Mark as done',
iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png'
}
],
message: 'You have a task set for today (' + currentDate + ') at ' + currentTime + ' named "' + taskTitle + '"'
}, function(id) {
myNotificationID = id;
});
chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) {
if (notifId === myNotificationID) {
if (btnIdx === 0) {} else if (btnIdx === 1) {
var i2 = i;
chrome.storage.sync.get(['importantTasks'], function(result, i, i2) {
var task = JSON.parse(result.importantTasks);
task[i2].checkedState = 'checked';
var JsonTask = JSON.stringify(task);
chrome.storage.sync.set({
'importantTasks': JsonTask
});
});
}
}
});
/* Add this to also handle the user's clicking
* the small 'x' on the top right corner */
chrome.notifications.onClosed.addListener(function() {});
}
}
});
}
// example usage: realtime clock
setInterval(function() {
getDateTime();
}, 1000);
所以问题在于,当用户单击“标记为完成”时,点击侦听器应执行一些代码,将该代码标记为已选中:
var task = JSON.parse(result.importantTasks);
task[i2].checkedState = 'checked';
var JsonTask = JSON.stringify(task);
chrome.storage.sync.set({'importantTasks': JsonTask});
但是,当代码到达task[i2].checkedState = 'checked';
时,会出现以下错误:
TypeError:无法读取未定义的属性“ checkedState”;
我看到其他人遇到相同问题的其他问题,人们说问题是未定义变量(在我的情况下为“任务”),要解决该问题,您必须添加task[i2] = []
。
我添加了此代码,错误停止显示,但是什么也没有发生。
有没有办法使这项工作按预期进行?
感谢您的任何帮助。
编辑: 因此,我删除了click函数内部的代码,并将其添加到其外部。 然后它可以正常工作,所以当我在click函数中添加它时出现了问题。