当后台页面处于非活动状态时,Chrome App推送消息不起作用

时间:2013-11-06 23:21:48

标签: google-chrome-app google-cloud-messaging chrome-gcm

的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。

当后台页面处于活动状态时,应用程序正常运行,我在屏幕右上角看到了通知消息弹出窗口。 (没有显示我暂时向我展示我的服务器使用的频道ID的一些代码。服务器是一个使用Google Cloud Messaging for Chrome服务的PHP程序。看起来没问题。)

但是,如果我在几秒钟内什么都不做,那么该应用就会变为无效状态。在Chrome的“扩展程序”页面上,行:

Inspect views: background page

更改为:

Inspect views: background page (Inactive)

当发送消息时,该行变为活动状态(“后台页面”,没有“(非活动)”部分,表示在某种意义上已收到消息。但是,通知代码不会产生在弹出窗口中。

我无法确定日志记录有什么问题,因为当打开JavaScript控制台时,应用程序会保持活动状态,然后才能运行。

问题:根据“扩展”页面上的状态指示,我的应用似乎在消息到达时被唤醒,但它无法正常工作。谁知道为什么?

BUG FILED :进行了更多测试,包括Chrome的稳定版(非测试版)。试用OS X,Chrome OS和Windows。一样。以下是我提交的问题:https://code.google.com/p/chromium/issues/detail?id=316315

2 个答案:

答案 0 :(得分:1)

听起来像一个错误,在http://crbug.com/net处提交一个错误并包含示例代码。更新问题以链接到该问题,以便其他人可以将其标记为跟踪状态。

答案 1 :(得分:0)

我误解了事件监听是如何运作的。这是信息:

https://developer.chrome.com/apps/event_pages.html#registration

“因为侦听器本身只存在于事件页面的上下文中,所以每次加载事件页面时都必须使用addListener;只有在runtime.onInstalled本身就这样做是不够的。”

在我提交的问题的评论中向我指出。现在一切正常。