2014-10-14 1 views
2

Я хочу, чтобы мое расширение хром взять notification.id, а также:chrome.notifications.update() или создать()

  1. Обновление существующего уведомления, если оно существует. OR
  2. Создайте новое уведомление, если оно не существует.

Вызов clear() затем create() не является идеальным, так как анимация визуально сотрясений для обоих remove() и create() методов, где я хочу, чтобы обновить без анимации. Плюс, очевидно, что вызов update() по исчезнутому уведомлению ничего не делает.

Есть ли простой способ реализовать это?

ответ

7

Редактировать: Этот подход больше не работает ни на одной платформе, кроме ChromeOS, из-за удаления Центра уведомлений Chrome.

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


Существует грязный трюк для повторного показа уведомления. Если вы измените приоритет уведомления на более высокое значение, он будет повторно показан, если он существует.

function createOrUpdate(id, options, callback) { 
    // Try to lower priority to minimal "shown" priority 
    chrome.notifications.update(id, {priority: 0}, function(existed) { 
    if(existed) { 
     var targetPriority = options.priority || 0; 
     options.priority = 1; 
     // Update with higher priority 
     chrome.notifications.update(id, options, function() { 
     chrome.notifications.update(id, {priority: targetPriority}, function() { 
      callback(true); // Updated 
     }); 
     }); 
    } else { 
     chrome.notifications.create(id, options, function() { 
     callback(false); // Created 
     }); 
    } 
    }); 
} 
+0

Это, похоже, уже не работает. –

+0

@aakashjain Я бы подумал, что это не так (за исключением ChromeOS), потому что центр уведомления удален. На самом деле нужно новое решение. – Xan

+0

Я не думаю, что есть решение для ОС без центра уведомлений. Единственное решение, которое я мог придумать, включает в себя показ нового уведомления каждый раз. –

0

Xan's answer больше не работает в Windows, MacOS или Linux. На этом этапе единственный способ убедиться, что ваше уведомление отображает, независимо от того, что нужно, - создать новое уведомление.

Если вы хотите предотвратить появление нескольких уведомлений на экране, вам необходимо очистить старое уведомление и заменить его новым. Это показано ниже.

NOTIFICATION_ID = "some_random_string"; 
function showNotification (... , callback) { 
    chrome.notifications.clear(NOTIFICATION_ID, function(cleared) { 
     var options = { 
      // whatever 
     }; 
     chrome.notifications.create(NOTIFICATION_ID, options, callback); 
    }); 
} 

Конечно, это приводит к анимации существующего уведомления получать освобождаемые и новое уведомление сразу же занял свое место, но, к сожалению, это неизбежно.

Смежные вопросы