1

清单.json:

{
   "app": {
      "background": {
         "scripts": [ "background.js" ]
      }
   },
   "key": "...",
   "manifest_version": 2,
   "name": "Push Sample",
   "permissions": [ "notifications", "pushMessaging" ],
   "version": "1.0"
}

背景.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。服务器是一个 PHP 程序,它使用 Google Cloud Messaging for Chrome 服务。看起来没问题。)

但是,如果我在几秒钟内什么都不做,该应用程序将变为非活动状态。在 Chrome 的 Extensions 页面上,该行:

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

4

2 回答 2

1

听起来像一个错误,请在http://crbug.com/net上提交一个文件并包含示例代码。更新问题以链接到该问题,以便其他人可以对其加注星标以跟踪状态。

于 2013-11-07T00:20:59.633 回答
0

我误解了事件监听的工作原理。这是信息:

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

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

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

于 2013-11-11T20:55:41.170 回答