В этом руководстве уже предполагается, что вы немного знакомы с расширениями Chrome и структурой кода.

Разрешения

Первое, что вам нужно сделать, это добавить разрешение на уведомления в ваш manifest.json.

"permissions": [
    "notifications",
    ....
],

Структура уведомлений

Далее я хочу сначала пройтись по основам отправки уведомления Chrome. Для любого приложения, которое вы пытаетесь сделать, я рекомендую создать функцию для создания уведомления, например:

//Call this notification() funtion for every notification you want to send
function notification(title, message){
    chrome.notifications.create(
        {
            title: title,
            message: message,
            iconUrl: "<imageurl>",
            type: "basic",
            requireInteraction: true
        }
    );
}

Есть очевидные компоненты, которые вы ожидаете; заголовок, сообщение и изображение. Есть и другие переменные, такие как тип (указывает, какое уведомление отправлять) и requireInteraction (чтобы оно не исчезало через несколько секунд, если хотите). Вот официальная документация разработчиков Chrome о том, как полностью настроить уведомления: https://developer.chrome.com/docs/extensions/reference/notifications/

Сроки и отмена ваших уведомлений

В этом разделе я собираюсь использовать вышеуказанную функцию, установив время ожидания уведомления («Через 5 минут отправить это уведомление»), а также как его отменить.

В этой части я пишу в фоновом режиме. Я доберусь до того, почему позже. Делается это довольно просто, как в:

var timeouts = [];
.
.
.
timeouts.push(
    setTimeout(function() {
        notification("Title", "Message");
    }, 1000);
)

В этом примере я использую метод «setTimeout», который также принимает число в миллисекундах, например, после того, когда нужно выполнить «function()». Кроме того, setTimeouts — это просто объекты, которые вы можете хранить в простом массиве. Таким образом, мне лично нравится хранить эти тайм-ауты в массиве.

Это полезно, потому что вы не можете на самом деле назначить «идентификатор» тайм-ауту, а console.log этого тайм-аута на основе этого идентификатора на случай, если вы захотите отладить. К сожалению, даже если вы хотите распечатать тайм-аут из массива timeout[], вы получите только целое число, но не содержимое тайм-аута (наше уведомление). Таким образом, уведомления могут рассматриваться как плохо оптимизированные.

Однако есть одна важная причина, по которой мне нравится хранить эти тайм-ауты в массиве, а также использовать фоновую страницу. Если это было сделано в обычном сценарии src, а расширение Chrome было закрыто, любое их хранилище будет потеряно, тогда как они не будут потеряны на фоновой странице.

var timeouts = [];
.
.
.
timeouts.push(
    setTimeout(function() {
        notification("Title", "Message");
    }, 1000);
);
.
.
.
for (var i=0; i<timeouts.length; i++) {
    clearTimeout(timeouts[i]);
}

В этом примере я использую метод clearTimeout() для очистки всего списка установленных таймаутов. Это также очищает уведомления.

Если это руководство помогло вам, не забудьте поставить аплодисменты и проверить мой проект, в котором используется эта функция:



https://github.com/ranashreyas/Synchro