Приложение 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 и включите пример кода. Обновите вопрос, чтобы связать его с проблемой, чтобы другие могли пометить его, чтобы отслеживать статус.

Другие вопросы по тегам