Не срабатывает скрипт напоминаний в расширении Chrome
В расширение Chroma надо встроить напоминалку, но вот почему то не идет запись в хранилище и в целом ни как не реагирует, были ошибки которые подсвечивал диспетчер расширений Chroma, я их поправил, теперь ни сообщений о ошибках, но и действий ни каких не происходит при попытке назначить уведомления. Что тут не так?
Код самой странички
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Напоминания</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Напоминания</h1>
<form>
<label for="event">Событие:</label>
<input type="text" id="event" required>
<br>
<label for="date">Дата:</label>
<input type="date" id="date" required>
<br>
<label for="time">Время:</label>
<input type="time" id="time" required>
<br>
<button type="button" id="addReminder">Добавить напоминание</button>
</form>
<ul id="reminders"></ul>
<script src="../js/reminders.js"></script>
</body>
</html>
Код скрипта
let reminders = [];
// Load any saved reminders from local storage
function loadReminders() {
chrome.storage.local.get('reminders', data => {
if (data.reminders) {
reminders = data.reminders;
displayReminders();
}
});
}
// Save the reminders to local storage
function saveReminders() {
chrome.storage.local.set({ reminders });
}
// Add a new reminder to the list and schedule a notification
function addReminderToList({event, date, time}) {
reminders.push({ event, date, time });
displayReminders();
chrome.runtime.sendMessage({ type: 'defaultNotification', event, date, time });
saveReminders();
}
// Display the list of reminders
function displayReminders() {
const list = document.getElementById('reminders');
list.innerHTML = '';
reminders.forEach((reminder, index) => {
const item = document.createElement('li');
item.innerHTML = `
<span>${reminder.event}</span>
<span>${reminder.date} ${reminder.time}</span>
<button class="delete" data-index="${index}">Удалить</button>
`;
list.appendChild(item);
});
}
// Handle the form submission to add a new reminder
document.getElementById('addReminder').addEventListener('submit', event => {
event.preventDefault();
const eventInput = document.getElementById('event');
const dateInput = document.getElementById('date');
const timeInput = document.getElementById('time');
const eventName = eventInput.value;
const date = dateInput.value;
const time = timeInput.value;
if (eventName && date && time) {
addReminderToList({event: eventName, date, time});
eventInput.value = '';
dateInput.value = '';
timeInput.value = '';
}
});
// Handle the click of the delete button on a reminder
document.getElementById('reminders').addEventListener('click', event => {
if (event.target.classList.contains('delete')) {
const index = event.target.getAttribute('data-index');
reminders.splice(index, 1);
displayReminders();
saveReminders();
}
});
// Schedule a notification for the specified event, date and time
function scheduleNotification(event, date, time) {
const notificationDate = new Date(`${date}T${time}:00`);
const now = new Date();
if (notificationDate > now) {
const diff = notificationDate - now;
const timezoneOffset = notificationDate.getTimezoneOffset() * 60000; // convert minutes to milliseconds
chrome.notifications.create(event, {
type: 'basic',
title: 'Напоминание',
message: event,
iconUrl: 'icon.png',
requireInteraction: true,
buttons: [{
title: 'Удалить',
iconUrl: 'delete.png'
}]
}, id => {
setTimeout(() => {
chrome.notifications.clear(id || event, () => {});
}, diff - timezoneOffset);
});
}
}
// Check if notifications are allowed and request permission if needed
function checkNotificationPermission() {
return new Promise(resolve => {
if (Notification.permission === 'granted') {
resolve();
} else if (Notification.permission !== 'denied' || Notification.permission === 'default') {
Notification.requestPermission().then(permission => {
if (permission === 'granted') {
resolve();
} else {
const error = new Error('Уведомления не разрешены');
reject(error);
}
});
} else {
const error = new Error('Уведомления не разрешены');
reject(error);
}
});
}
// Listen for messages from the extension
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'defaultNotification' && checkNotificationPermission()) {
scheduleNotification(message.event, message.date, message.time);
}
});
// Load the reminders when the popup is opened
loadReminders();
Код бэкграунда
// Listen for messages from other scripts
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'defaultNotification') {
// Forward the message to the page script
chrome.tabs.query({ active: true, currentWindow: true }, tabs => {
chrome.tabs.sendMessage(tabs[0].id, {
type: 'defaultNotification',
event: message.event,
date: message.date,
time: message.time
});
});
}
});
И манифест
{
"name": "Directorium",
"description": "Directorium",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background.js"
},
"icons": {
"16":"icon/Directorium-16.png",
"32":"icon/Directorium-32.png",
"64":"icon/Directorium-64.png",
"128":"icon/Directorium-64.png"
},
"action": {
"default_popup":"popup.html"
},
"permissions": [
"notifications",
"storage"
]
}