Фоновые страницы расширений Chrome

я создаю свое первое приложение Chrome (действие браузера). я считаю, что фоновые страницы должны выполняться все время в фоновом режиме. Например, если я пишу что-то вроде

window.setTimeout(getFeed, 30000);

Этот метод должен автоматически вызываться каждые 30 секунд и обновлять данные фида. Но кажется, что метод выполняется только в том случае, если я открываю всплывающую страницу расширения, щелкнув значок расширения в браузере. Это желаемое поведение или я что-то упускаю здесь.


person Muhammad Adeel Zahid    schedule 17.04.2012    source источник


Ответы (1)


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

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

На странице расширения с фидом настройте прослушиватель сообщений с помощью функции chrome.extension.onRequest.addListener, а на фоновой странице отправляйте сообщения, содержащие данные фида, с помощью chrome.extension.sendRequest. Вам просто нужно написать функцию, которая обновляет ленту, используя данные, полученные прослушивателем сообщений.

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

person apsillers    schedule 17.04.2012
comment
ах, это была очень основная ошибка. getFeed ничего не получает со всплывающей страницы. он просто обновляет последний канал в фоновом режиме и сохраняет в объекте, а позже на всплывающей странице используется объект этой фоновой страницы для обновления элементов пользовательского интерфейса во всплывающем окне. Однако большое спасибо за помощь - person Muhammad Adeel Zahid; 17.04.2012