Приложение Chrome pushMessaging не работает, когда фоновая страница неактивна
manifest.json:
{
"app": {
"background": {
"scripts": [ "background.js" ]
}
},
"key": "...",
"manifest_version": 2,
"name": "Push Sample",
"permissions": [ "notifications", "pushMessaging" ],
"version": "1.0"
}
background.js:
chrome.runtime.onInstalled.addListener(
function() {
chrome.pushMessaging.onMessage.addListener(
function (message) {
chrome.notifications.create(
'',
{
type: 'basic',
iconUrl: 'icon24.png',
title: 'The Title',
message: message.payload
},
function (notificationID) {
}
);
}
);
}
);
Вот и все приложение. Нет HTML-страницы (окно не создано) и нет другого JavaScript.
Когда фоновая страница активна, приложение работает нормально, и я вижу всплывающее сообщение с уведомлением в правом верхнем углу моего экрана. (Не показан некоторый код, который я временно использовал, чтобы показать мне идентификатор канала, который использует мой сервер. Сервер - это программа PHP, которая использует службу Google Cloud Messaging для Chrome. Кажется, все в порядке.)
Однако, если я ничего не делаю в течение нескольких секунд, приложение становится неактивным. На странице расширений в Chrome строка:
Inspect views: background page
изменения в:
Inspect views: background page (Inactive)
Когда сообщение затем отправляется, эта строка переходит в активное состояние ("фоновая страница", без части "(Неактивно)", что указывает на то, что сообщение в некотором смысле получено. Однако код уведомления не приводит к появлению всплывающего окна.,
Я не могу определить, что не так с журналированием, потому что когда консоль JavaScript открыта, приложение остается активным, а затем работает.
Вопрос: моё приложение, похоже, проснулось, когда пришло сообщение, согласно индикации состояния на странице Расширения, но оно не работает. Кто-нибудь знает почему?
ОШИБКА ОБЪЕКТА: Провел гораздо больше тестов, в том числе со стабильной (не бета) версией Chrome. Пробовал на OS X, Chrome OS и Windows. То же самое. Вот проблема, которую я подал: https://code.google.com/p/chromium/issues/detail?id=316315
2 ответа
Я неправильно понял, как работает прослушивание событий. Вот информация:
https://developer.chrome.com/apps/event_pages.html
"Поскольку сами слушатели существуют только в контексте страницы события, вы должны использовать addListener каждый раз, когда страница события загружается; делать это только во время выполнения.onInstalled само по себе недостаточно".
Указал мне в комментарии к проблеме, которую я подал. Все работает сейчас.
Похоже, ошибка, подайте один на http://crbug.com/net и включите пример кода. Обновите вопрос, чтобы связать его с проблемой, чтобы другие могли пометить его, чтобы отслеживать статус.