2012-04-05 2 views
0

Я хотел бы написать расширение, которое отображает уведомление на рабочем столе каждый день в указанное время. Имея быстрый взгляд через API для Chrome, похоже, единственный способ сделать это было бы:Отображать уведомление о рабочем столе каждый день в определенное время.

  • создать фоновую страницу для моего расширения,
  • использовать setInterval() с достаточно низким разрешением, чтобы не налог на CPU (даже 5 минут в порядке),
  • при срабатывании интервальных огней, проверьте, не текущее время после необходимого времени,
  • убедитесь, что пользователь еще не отобразил уведомление сегодня.

(Детали последнего шага не имеют отношения к моему вопросу, просто добавьте, чтобы показать, что я понимаю, что мне нужно предотвратить «хлопание» извещения).

Это кажется довольно косвенным и потенциально дорогостоящим; есть ли способ обойти это? Требуется ли фоновая страница?

Я полагаю, что я мог бы просто вызвать setTimeout() и только запустить событие один раз (путем вычисления времени между & желаемым временем), а затем вызвать его снова после отображения уведомления. По какой-то причине это звучит более «хрупким», хотя я не уверен, почему ...

+0

Хороший подход - я думаю, что setInterval лучше, потому что когда вы выполняете setTimeout с задержкой дня и перезапуском браузера, уведомление не будет отображаться. – hamczu

+0

Спасибо hamczu, в случае перезапуска браузера я просто перезапустил таймер setInterval, потому что мой фоновая страница снова получит событие DOMContentLoaded. –

ответ

1

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

Итак, при загрузке исходной страницы (запуск браузера) вы определяете текущее время и смещение на следующее время уведомления и устанавливаете интервал на этот точный интервал. Таким образом, вам не нужно будет проводить опрос каждые пять минут и/или работать, если вы указали сообщение. Вы просто показываете его в нужное время. Это должно быть гораздо более эффективным, эффективным и чистым, чем опрос. При уведомлении вы снова возвращаете интервал.

Некоторые примеры функции здесь:

setTimeout but for a given time

От чтения выше поста и от быстрого поиска в сети кажется, что вы не должны иметь никаких проблем, призывающую setInterval для интервала например, один раз в день. Кальвин предлагает 25 дней!

Вот как я подхожу к нему.

РЕДАКТИРОВАТЬ: После публикации одной вещи, которая возникла в голове, что происходит, если компьютер переходит в спящий режим в течение n часов? Мне нужно проверить это самостоятельно для аналогичного проекта, поэтому я обновлю, как только у меня будет возможность проверить это.

+0

Спасибо, Ричард, я думаю, что немного не решался использовать справочную страницу, потому что в документации Google было сказано, что их следует избегать, если это необходимо (так как они используют ресурсы), но это определенно похоже на путь. Мне тоже было интересно о спячке, но, надеюсь, Chrome учитывает это. (Кстати, это будет внутренний инструмент для работы на настольных компьютерах, поэтому мне, вероятно, не нужно слишком беспокоиться об этом ...) –

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