2013-05-13 2 views
0

У меня есть функция уведомлений в моем расширении chrome, который управляется справочной страницей (background.html) Эта страница вызывает функцию setNotificationDelay(), которая в основном является удалением предыдущего таймера, за которым следует setTimeOut.setTimeOut scope в расширении Chrome

function setNotificationDelay() { 
    clearNotificationTimer(); 
    newDelay = getNotificationDelay() 
    notificationTimer = setTimeout(showNotification, newDelay); 
    } 
} 

У меня также есть страница options.html, которая позволяет настроить час уведомления. Я хочу изменить интервал времени фона при изменении конфигурации, но когда я вызываю setNotificationDelay() со страницы Option, это не работает, и я предполагаю, что это потому, что область таймеров привязана к родительской странице.

Если я разрешаю странице Option, открывается таймаут, если я закрываю его, уведомление никогда не происходило.

Как подключить этот таймер к фоновой странице? Есть ли лучший способ достичь этого?

Спасибо.

EDIT: chrome.extension есть страничный метод getBackground который возвращает объект окна для фона страницы:

function setNotificationDelay() { 
    clearNotificationTimer(); 
    newDelay = getNotificationDelay() 
    notificationTimer = chrome.extension.getBackgroundPage().setTimeout(showNotification, newDelay); 
    } 
} 

ответ

2

options.js является только активным, пока options.html страница открыта, и я полагаю, вы не хотите оставить страницу открытой, пока вы ждете уведомления. То, что вы хотите (я думаю), должно иметь background.js установить уведомление (оба background.js и options.js получают доступ к одной и той же строковой переменной localStorage.yourNotificationDelay).

Следует обратить внимание на то, что если вы используете event pages вместо фоновых страниц, уведомление о более чем нескольких секундах не произойдет, потому что Chrome выгрузит фоновый рисунок. В этом случае вам нужно будет использовать alarms.

Редактировать: Ваше изменение заставляет меня думать, что я не понимаю вас. Возможно, вы ожидаете, что пользователь изменит интервал во время работы таймера? Тогда я бы рекомендовал отправить message на background.js с newDelay и использовать его для звонка setNotificationDelay().

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